ユニファ開発者ブログスマートフォン用の表示で見るユニファ開発者ブログユニファ株式会社システム開発部メンバーによるブログです。APIこんにちは、サーバーサイドエンジニアの本間です。ご紹介させていただきました。今回は、このプロダクトのサーバーサイド開発で工夫した点をご紹介したいと思います。この開発におけるサーバーサイドエンジニアの主なタスクは、デジタル連絡帳のデータを保管するためのAPIサーバーの構築です。開発を円滑に進める上での鍵になりそうだなと考えていました。この問題に対応するため、以下の2つの対策を可能な限り工数をかけずに実施したいと思い、調査しました。使えるのではないかと考えました。UIは、Swagger形式(APIの仕様を表すドキュメンテーション形式の1つ)で書かれたファイルを読み込んで、ブラウザ上でAPIの仕様や動作確認ができるツールです。見ていただくとイメージが掴みやすいかと思います。各APIのリクエストやレスポンスの仕様がブラウザ上で確認できるほか、実際にAPIにリクエストを送って挙動を確認することもできます。UIと連携したAPIサーバーを容易に構築できそうということがわかってきました。今回の開発は、これらのツール、ライブラリを組み合わせてAPIサーバーを構築しました。その内容をサンプルアプリケーションを使って説明しようと思います。2.3.0以降とbundlerがインストールされているPCであれば、以下のコマンドを実行することで確認できます。アクセスすれば、下記のようなSwagger-UIの画面を表示する事ができます。各APIをクリックするとリクエストやレスポンスの詳細が表示されます。out!」のボタンを押すと実際にAPIにリクエストを投げて、挙動やレスポンスを確認することもできます。以下が必要な作業一覧になります。UIと連携したAPIサーバーを作ることができます。UIでAPIの情報を表示するためにどんなコードを書いているかも説明いたします。1件作成」のAPIを見てみます。以下は、Swaggerのドキュメントに関係ある部分だけを抽出しています。処理成功時のレスポンスの内容。ブロックで指定している各パラメーターの定義は、APIの実装でも使用しています。そのため、APIの実装をするだけでリクエストやレスポンスに関する最低限のドキュメントを用意することができます。あとは、ヘッダーや処理失敗時の説明を追加するだけで、十分な情報をもったドキュメントを自動で生成することができます。UIで見ると以下のようになります。リクエストやレスポンスの仕様の確認の他、実際にリクエストを投げてみてデータを作成することもできます。APIは合計で80個ほどあるのですが、全てで上記のようなコードを書いています。実装と共通のコードが多いため、工数はそれほどかからずに対応できました。UIを開発初期はアプリケーションエンジニアの方のローカルで、中盤以降は共通の開発サーバーで動かしました。開発終了後、アプリケーションエンジニアの方と振り返り会を行ったのですが、「実際に動かして挙動を確かめられたのは開発にかなり役に立った」というコメントをいただくことができました。UIでのAPIの仕様や動作の確認ですが、開発が進むにつれ、いくつか問題があることがわかってきました。2.0のフローに沿った認可制御をかけるようにしました。これによりAPIの動作確認にもアクセストークンがないとエラーが発生してしまうようになりました。事前にcurl等のコマンドでアクセストークンを取得し、Authorizationヘッダーに設定すれば使用できるのですが、利用までの作業が多く利便性が大きく下がってしまいました。UI上でも簡単にアクセストークンの取得、設定ができるようになるようなので、早期に導入したいと考えています。UIで「ユーザー一覧(/users)」のレスポンスは、定義と実際の内容が異なっています。定義には含まれているのに、実際のレスポンスには含まれていません。値を意図的に抜いているのですが、その内容がSwaggerの方に反映されていません。抜いたEntityと含めたEntityをそれぞれ定義して、これを適切な場所で参照する必要があります。grape-entityの継承を適切に使用すれば、比較的容易に対応できると考えています。実際のAPIではエラーメッセージに加えエラーコードも返しています。エラーコードは同じステータスコードに対して複数あります。エラーコードはアプリケーション側で適切なエラー処理を行うために非常に大切な情報なのですが、現状この情報は以下のように無理やり説明に押し込んで表示している状態です。明らかに見づらいため改善したいのですが、Swaggerの仕様内ではうまい解決方法がないと思われるので、対応方法を検討中です。いうクライアント側のコードを自動生成してくれるツールがあります。今回の開発では、Swagger形式のドキュメントの内容とAPIの挙動に少しズレがあったため採用は見送っていたのですが、ここに書いた問題が修正できれば利用できるかもしれないと考えています。iOS/Androidではすでにクライアントのコードが存在するため置き換えは難しいですが、例えば今後PC用の画面をAPIを使って作る、となった場合にJavaScriptのコードを自動生成するといった使い方ができると考えています。UIでアプリケーション開発者に優しいAPIサーバーの構築方法を紹介いたしました。これからAPIサーバーを構築するサーバーサイドエンジニアの方の参考になれば幸いです。それでは最後までご覧いただきありがとうございました。リニューアルで実施した技術的な変更のご紹介お久しぶりです、Webエンジニアの本間です。Fargate)で運用する際のログ設定で工夫した点こんにちは、Webエンジニアの本間です。今回、Railsアプリケー...2018-01-29RailsアプリからGoogleフォトに写真をアップロードしてみるこんにちは、Webエンジニアの本間です。昨年も予定通り12月25...2017-11-29もしデータベースのトランザクションが使えなかったらこんにちは、システム開発部のちょうです。Detection月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。