goでJSONを返すAPIサーバー
インフラ側だと何かと環境構築後にサンプルアプリを動作させる機会が多く、その度にサンプルAPIを作成する必要があったり、開発はローカルで行いたいがAPIエンドポイントがPJ都合でローカルからは直に届かない場合が度々あった。
そこで表題の通り、ローカルで動作する(主に)任意のjsonをリターンするだけの汎用的なAPIアプリケーションサーバーを実装した。
以下コンテナーイメージ。
hub.docker.com
以下全コード。
github.com
以下の通りcurlするとJSONが返る。"/list"へのアクセスはコンテナーのIPアドレスやホスト名等を返すようにした。
❯❯❯ curl -i -X GET http://localhost:3002/list HTTP/1.1 200 OK Content-Type: application/json Date: Tue, 12 Mar 2019 12:22:48 GMT Content-Length: 77 {"ipaddress":["127.0.0.1,172.17.0.2"],"hostname":"cb0a02e8984d","os":"linux"}
末尾に"/"がいると404が返るように実装。
❯❯❯ curl -i -X GET http://localhost:3002/list/ HTTP/1.1 404 Not Found Date: Tue, 12 Mar 2019 12:22:44 GMT Content-Length: 0
例えばプライベートに閉じたAWSサービスを利用した開発を行う場合、プロジェクト都合でローカルPCから直接AWSサービスを利用することが出来ない(APIエンドポイントの疎通がない場合)がある。
リターンするJsonを把握できていれば、ローカルにAPIサーバーを立てることで仮想的にサービスエンドポイントを利用できる。
今回はPUTリクエストで新しく任意のエンドポイントを作成し、リターンオブジェクトを保管させるように実装した。
PUTリクエストで新規エンドポイント作成の場合、201がリターン。
#リターン内容として '{"message": "Hello World!"}' を登録。 ## create new content. ❯❯❯ curl -i -X PUT localhost:3002/list/api/v1/newContent -H "Content-Type: application/json" -d '{"message": "Hello World!"}' HTTP/1.1 201 Created Content-Type: application/json Date: Tue, 12 Mar 2019 12:31:57 GMT Content-Length: 52 #取得する。 ❯❯❯ curl -i -X GET http://localhost:3002/list/api/v1/newContent HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 14 Mar 2019 11:38:57 GMT Content-Length: 27 {"message": "Hello World!"}% ❯❯❯
既存のエンドポイントのコンテンツ更新の場合は204をリターン。
❯❯❯ curl -i -X PUT localhost:3002/list/api/v1/newContent -H "Content-Type: application/json" -d '{"message": "May the 4th be with you"}' HTTP/1.1 204 No Content Content-Type: application/json Date: Thu, 14 Mar 2019 11:40:15 GMT ❯❯❯ curl -i -X GET http://localhost:3002/list/api/v1/newContent HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 14 Mar 2019 11:40:20 GMT Content-Length: 38 {"message": "May the 4th be with you"}% ❯❯❯
エンドポイントの削除はDELETEリクエスト。204がリターン。
❯❯❯ curl -i -X DELETE http://localhost:3002/list/api/v1/newContent HTTP/1.1 204 No Content Content-Type: Date: Tue, 12 Mar 2019 12:39:08 GMT
再度リクエストを投げると削除済みエンドポイントのため404。
❯❯❯ curl -i -X GET http://localhost:3002/list/api/v1/newContent HTTP/1.1 404 Not Found Content-Type: Date: Tue, 12 Mar 2019 12:39:23 GMT Content-Length: 0
以上。