[Golang/Go言語]GinフレームワークでAPI開発3~OpenAPIの導入~

こんにちは。KOUKIです。

とあるWeb系企業で、Goエンジニアをやっています。

前回は、Go言語のフレームワークである「Gin」を使って簡単なAPI開発手法を紹介しました。

今回は、OpenAPIの紹介をしたいと思います。

参考

以下のリポジトリを参考にしています。

https://github.com/PacktPublishing/Building-Distributed-Applications-in-Gin

環境

Mac + Chromeで開発します。

前回

前回は、CRUDのAPIを開発しました。

OpenAPIとは

OpenAPIは、開発したRestful APIの仕様をドキュメント化するツールです。Swaggerとも呼ばれます。

これは、以下の機能を持っています。

  • APIの仕様をドキュメントとして生成する
  • 簡単なHTTPリクエストのデモが行える

Install

go-swaggerをインストールしましょう。

色々と方法はありますが、今回は私の大好きなDockerでインストールしたいと思います。

aliasを毎回貼るのはめんどくさそうですね。

OpenAPI(Swagger)のメタデータ

OpenAPIでドキュメントを生成するには、フォーマットとなるメタデータを理解する必要があります。

プロパティ 説明
Schemes APIでサポートされているプロトコル(http or https)を指定する
Host APIサーバーのホスト(例: localhost:8080)
BasePath APIのデフォルトベースパス(/)
Version APIの現在のバージョン
Contact APIのオーナーか開発者
Consumes 受け取る時のデフォルトのMIME type(例: application/json)
Produces 送る時のデフォルトのMIM typeのリスト

上記を参考に、前回作成したmain関数にドキュメントを追加しましょう。

こんな感じで、package mainの上にドキュメント(コメント)を書きます。

ドキュメントの生成

以下のコマンドで、ドキュメントを生成します。

なんかエラーが出ました。Dockerから権限のあるフォルダにアクセスする時にエラーが出る様です…

上記の記事を参考にaliasを修正します。

気を取り直して、再度コマンドを実行しましょう。

コマンドの実行に成功するとコマンドを実行したディレクトリの階層に「swagger.json」ファイルが生成されます。

yaml形式で出力したい場合は、拡張子を変えるだけでOKです。

ドキュメントを表示する

ドキュメントを表示しましょう。

Dockerで動かしているので、外部からリクエストを受信できるようにportオプションを付ける必要があります。

上記は、3000番PortでDockerコンテナに繋げるようにした例です。

続いて、OpenAPIのサーバーを下記のコマンドで立ち上げます。

「http://localhost:3000」にアクセスしましょう。

おお。素晴らしいですね。

オプションを変えれば、別のUIが見れます。

かっこいいですね。

エンドポイントを設定する

お次は、エンドポイントを設定してみましょう。

プロパティ 説明
Summary エンドポイントの概要
Responses レスポンスのリスト
Parameters エンドポイントに渡すパラメータのリスト
Consumes 受信時のMIMEタイプのリスト(例: application/json)
Produces 送信時のMIMEタイプのリスト(例: application/json)

早速、定義してみましょう。

ListRecipesHandler

main関数のようにコメントに書きました。インデントとか誤字に注意して下さい

以下のコマンドで、swagger.jsonを生成します。

swagger.jsonの中身を確認してみると、新しく行が追加されたことがわかります。

下記のコマンドで、Swagger サーバーを立ち上げましょう。

いい感じですね。

上記画面の「Try it out」->「Execute」を押下してみましょう。

curl例やRequest URLが出てきて、とてもいい感じのドキュメントですね。

そのほかのエンドポイント

他のエンドポイントも設定していきましょう。

NewRecipeHandler

UpdateRecipeHandler

DeleteRecipeHandler

SearchRecipesHandler

swagger.jsonの生成

APIドキュメントの表示

下記のコマンドで、ドキュメントを表示します。

結構いい感じですね。

実務でも取り入れたいと思います。

次回

次回は未定ですが、Docker化とDBの導入に挑戦したいと思ってます!

Go記事まとめ

Go記事をまとめます。

コメントを残す