#author("2022-04-22T00:03:49+00:00","default:admin","admin") #author("2022-05-12T08:20:01+00:00","default:admin","admin") -[[5分で絶対に分かるAPI設計の考え方とポイント:http://www.atmarkit.co.jp/ait/articles/1511/19/news022.html]] -[[Web API 設計入門:https://zenn.dev/nakaryo/articles/87b15866d67efe]] -[[Technical Note - Web API The Good Parts:https://hkawabata.github.io/technical-note/note/Reading-Notes/Web-API-The-Good-Parts.html]] -[[翻訳: WebAPI 設計のベストプラクティス:http://qiita.com/mserizawa/items/b833e407d89abd21ee72]] -[[綺麗なAPIを設計するには気をつけたい5つのポイント:https://developer.ntt.com/ja/blog/741a176b-372f-4666-b649-b677dd23e3f3]] -[[使い勝手や拡張性を担保できるAPI設計には、設計時のルール作成が不可欠:https://www.apibank.jp/contents/news/what-matters-to-api-design/]] -[[GoogleのWebAPI設計とWebAPI設計のベストプラクティスを比較してみる:http://qiita.com/howdy39/items/3b2b14ce73ec44c54f7b]] -[[「WebAPI 設計のベストプラクティス」に対する所感:http://qiita.com/ryo88c/items/0a3c7861015861026e00]] -[[WebAPIの設計から実装まで〜設計編〜:http://qiita.com/takeokunnn/items/5442bb266fee6ee07799]] -[[WebAPIの設計から実装まで〜実装編〜:http://qiita.com/takeokunnn/items/c119e576a6c04d37e098]] -[[API 設計: gRPC、OpenAPI、REST の概要と、それらを使用するタイミングを理解する:https://cloud.google.com/blog/ja/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them]] -[[Swagger、GraphQL、gRPC+Protocol Buffersの概観:https://qiita.com/ara_tack/items/f1252d335a0f18f96a4c]] -[[OpenAPI や Protocol Buffers のおかげで開発がかなり捗っている話:https://developer.medley.jp/entry/2020/08/21/190934]] -[[マイクロサービスにおけるWeb APIスキーマの管理 ─ GraphQL、gRPC、OpenAPIの特徴と使いどころ:https://employment.en-japan.com/engineerhub/entry/2019/08/22/103000]] -[[ASP.NET CoreでgRPCサービスを作ってみた:https://www.qes.co.jp/media/Microservices/a64]] -[[IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用:https://engineer.dena.com/posts/2020.03/mov-central-service/]] *リクエスト [#b9c32acc] **エンドポイント [#y1a65b36] -[[Web API 設計の基本を学ぶ(APIエンドポイント):https://qiita.com/Amtkxa/items/2c5df130e44e8e8d4a6b#:~:text=API%20%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%EF%BC%88URI%EF%BC%89%20%E3%81%AE,%E3%81%82%E3%82%8B%E3%81%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82]] -[[SPA開発におけるWeb API設計入門(エンドポイント編):https://www.hypertextcandy.com/web-api-url-design-primer]] ***URI [#q9a6bfe8] -動詞ではなく名詞を用い、複数形とする -スネイクケース推奨 --但し、ドメイン名ではスネイクケースが使用できないことに留意 -APIのバージョンをURIに含める --バージョン番号は「v」+「整数」(例:v1, v2, ...) -ベースURIにAPI提供を表す「api」という単語を含める ***パラメタ [#f6ca9b6c] -1つのパラメタに複数の値を指定する際にはカンマ「,」を用いる ***ページネーション [#va71087d] -[[RESTful API のページネーションで考えるべきこと:https://qiita.com/utisam/items/0be34f4e813ffa93b533]] -[[Web Api でずれないページネーションとSQL:https://qiita.com/chikara_funabashi/items/72dde4fae55c9519610d]] -[[REST APIのデータ制御について(クエリ、ページネーション):https://medium.com/@Akitsuyoshi/rest-api%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%88%B6%E5%BE%A1%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-%E3%82%AF%E3%82%A8%E3%83%AA-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%8D%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-6aacb4a5498d]] -limit/offset型 --取得開始ページ「offset」または「page」と件数「limit」とする -ページ番号型 --ページ番号「page」とする -カーソル型 --「cursor」で開始するデータの ID を指定 --データ量が多い場合に備えて「limit」も指定できるようにする *レスポンス [#t851304e] -[[RESTful APIのHTTPステータスコード設計:https://qiita.com/NagaokaKenichi/items/eb85b5fbb719d60c6627]] **文字コード [#r517d9d7] -UTF8 **データ表記 [#m7d2bf3b] ***日時 [#uce057ef] -[[ISO 8601 - WIkipedia:https://ja.wikipedia.org/wiki/ISO_8601]] -[[ISO 8601 の時刻表記:https://www.keicode.com/note/datetime-iso8601.php]] -[[Date and Time API 復習:https://qiita.com/opengl-8080/items/d0dc57d64d3a871a8463]] -ISO8601に準拠 -日本時間の場合:YYYY-MM-DDTHH:mm:ss+0900 ***性別 [#tce1b184] -[[システムで「性別」の情報を扱う前に知っておくべきこと:https://qiita.com/aoshirobo/items/32deb45cb8c8b87d65a4]] -ISO5218に準拠 -男性は 1、女性は 2、それ以外は 9、不明な場合は 0 **メタデータ [#nb2620e1] -[[API はメタデータを提供せよ LT#1 JJUG_CCC2018:https://www.slideshare.net/cdatajapan/api-lt1-jjugccc2018]] **エラー [#t29c2016] -[[RESTful APIのエラー設計:https://qiita.com/NagaokaKenichi/items/20825ae9256d9f4c6f35]] -[[WebAPIでエラーをどう表現すべき?15のサービスを調査してみた:https://qiita.com/suin/items/f7ac4de914e9f3f35884]] ***データ項目 [#y53644fa] -status ... HTTPステータスコードをHTTPレスポンスヘッダに格納 -type ... エラーの種別を示すURIを格納 -title ... エラーの名称を表示 -detail ... エラーの説明文を格納 ***セキュアなエラーフィードバック [#k8c256be] -403 Forbidden --データへのアクセス不許可 → データが存在することを暗に認めていることになる --「404 Not Found」レスポンスに変えることも検討する -500 Internal Server Error --APIのベースとなっている技術スタックに関する詳細情報が提供されないようにすること --APIの内部で実際に稼働しているものの手がかりになるような情報を提供しないように注意する必要がある *HAL (Hyper Application Language) [#f8c117a4] -[[HAL - Hypertext Application Language:https://stateless.group/hal_specification.html]] -[[Web APIにはJSONベースのフォーマットを使おう:https://qiita.com/tkawa/items/2841e155e5b51c09ed40]] *ファイルアップロード [#rdf307bd] -[[WebAPI でファイルをアップロードする方法アレコレ:https://qiita.com/mserizawa/items/7f1b9e5077fd3a9d336b]]