ヽ(´・肉・`)ノログ

How do we fighting without fighting?

OpenAPI(Swagger)定義を読み込んでcodeを生成する

OpenAPI (旧 Swagger) とは

ための標準的なインターフェースを定義したもの.

単に定義してあるだけではなく ツール が充実しているので

といったことが容易にできる.

今回は Swagger-CodeGen を利用して,Elixir 用のコード生成を試みる.

インストール

OS X Users によると Java 7 以上が必要だ.

Getting Started を参考に,最終安定版(v2.2.1)のコードを clone して,PHP のコードを生成してみた.

/Users/niku/src% java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
/Users/niku/src% git clone -b v2.2.1 https://github.com/swagger-api/swagger-codegen
(...snip...)
/Users/niku/src% cd swagger-codegen
/Users/niku/src/swagger-codegen % mvn clean package
(...snip...)
/Users/niku/src/swagger-codegen% java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
   -i http://petstore.swagger.io/v2/swagger.json \
   -l php \
   -o /var/tmp/php_api_client
/Users/niku/src/swagger-codegen% ls /var/tmp/php_api_client/SwaggerClient-php/
LICENSE  README.md  autoload.php  composer.json  docs  git_push.sh  lib  test

なるほど.

コードの雛形を作る

Making your own codegen modules というセクションに

If you’re starting a project with a new language and don’t see what you need, swagger-codegen can help you create a project to generate your own libraries:

とある.

/Users/niku/src/swagger-codegen% java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar help meta

すると引数に何を渡すといいかわかる.

CodeGen の名前は既存のディレクトリを参考にするとよい.

/Users/niku/src/swagger-codegen% ls -1 modules/swagger-codegen/src/main/java/io/swagger/codegen/languages=
AbstractCSharpCodegen.java
AbstractJavaCodegen.java
AbstractJavaJAXRSServerCodegen.java
AbstractPhpCodegen.java
AbstractTypeScriptClientCodegen.java
AkkaScalaClientCodegen.java
AndroidClientCodegen.java
AspNet5ServerCodegen.java
AsyncScalaClientCodegen.java
CSharpClientCodegen.java
ClojureClientCodegen.java
(...snip...)

Ruby だと SinatraServerCodegen.java といったようなものがあるから,Elixir の Plug で作るから PlugServerCodegen という名前にしよう.

/Users/niku/src/swagger-codegen% java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta -o output/myLibrary -n PlugServer
(...snip...)
/Users/niku/src/swagger-codegen% head output/myLibrary/src/main/java/io/swagger/codegen/PlugserverGenerator.java
package io.swagger.codegen;

import io.swagger.codegen.*;
import io.swagger.models.properties.*;

import java.util.*;
import java.io.File;

public class PlugserverGenerator extends DefaultCodegen implements CodegenConfig {

Elixir コードを生成するための Java コードの雛形を作れた.

(つづく)