SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2025 セッションレポート(AD)

Web開発者必見! 現場で役立つAPI設計のポイントを先人に学ぼう

【14-A-5】現場で役立つAPIデザイン

  • X ポスト
  • このエントリーをはてなブックマークに追加

現場で役立つAPI設計のポイント集

(1)APIエンドポイントには明確で一貫性のある名前を使う

 RESTの原則では、一意のリソースをURLで表現する。そしてリソースとは物や事象を指すので、通常はURLのパス名に名詞を用いる。動詞や短縮形を用いるのは不適切だ。その際、リソースの集合にアクセスするケースが多いので、一般的には名詞の複数型を用いる。

 命名の良い例と悪い例
良い例 悪い例
/products /getProducts
/customers /cust
/orders /order-info
例外:search(慣用的に使われる)

 より複雑なデータを取得する場合、リソース同士の関係をURLで表現する。その際は、あるリソースの個別IDの後に、関連するリソースのパスを続けるのが一般的だ。例えば、特定の商品についての注文一覧や、顧客が複数の住所を持っている場合の一覧を取得する場合、以下のようなURL形式となる。

リソースとの関係とURL形式の例 
関係
商品の注文 /products/:product_id/orders
顧客の住所 /customers/:customer_id/addresses

 APIエンドポイントは適切に抽象化を行う。データベースのテーブル名をそのままURLとして使うなど、実装に依存した構造をAPIに反映するのは避けるべきだ。またページごとに専用のAPIを設けるなど、アプリの用途に特化しすぎる設計も望ましくない。ただし、内部システム向けのAPIで、パフォーマンス向上などの事情が存在する場合は、この限りではない。

(2)必須情報にはパラメータを使い、追加情報にはクエリ文字列を使う

 パスパラメータは、特定の製品情報や、特定の顧客情報など、一意のリソースを指定してアクセスする際に使う。例えば、URLでリソースの集合を指定した後に、IDを付与する形で用いる。

リソースとパスパラメータの例
リソース
特定の製品情報 /products/12345
特定の顧客情報 /customers/23456
特定の注文情報 /orders/34567

 クエリパラメータは、フィルタや並べ替えなど、取得するデータのバリエーションを指定するために用いる。クエリパラメータは省略可能な項目にだけ使い、一意のリソースを表すのに必須の項目に使ってはならない。

リソースとクエリパラメータの例 
目的
フィルタ /products?category=electronics
並べ替え /products?price=desc
結果の限定 /orders?status=pending&limit=10

(3)エンドポイントが何をするかに基づいて正しいHTTPメソッドを使用する

 エンドポイントで表されるリソースに対してどうアクセスし、どんな操作を行うかを指定するのがHTTPメソッドだ。APIにおいても、HTTPプロトコルの標準仕様に沿って、適切に使用しなければならない。特に、CRUD(Create, Read, Update, Delete)操作は頻繁に行われるため、HTTPメソッドに対応するようにリソースへの操作を行うことが、RESTful APIにおける原則だ。

(4)APIがデータを正しく受け取り、応答できるように設計する

 Content-Typeヘッダで、リクエストボディのデータ形式を正しく設定することで、APIサーバが受け取ったデータを適切に解釈でき、また意図したデータが送信されたことを確認できる。逆に、クライアントが受け取りたいデータ形式は、Acceptリクエストヘッダで指定する。レスポンスデータに複数の形式が想定される場合、q(Quality Value)を付与することで、受け取りたい形式の優先度を指定する。サーバはクライアントの希望を考慮して、レスポンスデータ形式を決定する。このようなヘッダでレスポンスデータ形式を指定する方法を、コンテンツネゴシエーションと呼ぶ。ただし、ヘッダを使わず、単にクエリパラメータで形式を指定する方法も、よく使われる。

 コンテンツネゴシエーションは、データ形式以外にも、言語指定や、APIのバージョニングにも用いられる。一度公開したAPIを変更する際は、従来の利用者がAPIを使用し続けられるよう、慎重なバージョン管理が必要になる。特に、後方互換性のないmajorバージョンアップについては、一定期間、APIの新旧バージョンを共存させることになるだろう。その際、URLにバージョン番号を組み込むURLバージョニング、クエリパラメータによるバージョニングなどの方法があるが、コンテンツネゴシエーションによる方法が最も柔軟だという。

 指定方法との対応表
指定方法 説明
URLバージョニング /v1/products URLにメジャーバージョンを含める
クエリパラメータ /products?price=desc クエリとしてバージョンを指定
ヘッダ Accept: application/vnd.api+json;version=1 コンテンツネゴシエーションを使用

 適切なステータスコードや、一貫したエラーレスポンスを返すことも重要だ。そうすることで、API利用者が、クライアントに期待されている振る舞いを理解するのに役立つ。原則的にステータスコードは、HTTP標準に準拠するのが望ましい。ただし現実の実装では、さまざまな例外があるので、ステータスコードの細かいユースケースについては、実際のAPIガイドラインを参照するのが良い。またエラーレスポンスについては、RFC 7807という標準仕様が策定されているので、参考にしてほしい。

次のページ
キャッシングの適切なコントロールでAPIを高速化

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Developers Summit 2025 セッションレポート連載記事一覧

もっと読む

この記事の著者

Innerstudio 鍋島 理人(ナベシマ マサト)

 ITライター・イベントプロデューサー・ITコミュニティ運営支援。 Developers Summit (翔泳社)元スタッフ。現在はフリーランスで、複数のITコミュニティの運営支援やDevRel活動の支援、企業ITコンテンツの制作に携わっている。 Twitter:@nabemasat Facebook Web

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

篠部 雅貴(シノベ マサタカ)

 フリーカメラマン 1975年生まれ。 学生時代、大学を休学しオーストラリアをバイクで放浪。旅の途中で撮影の面白さに惹かれ写真の道へ。 卒業後、都内の商業スタジオにカメラマンとして14年間勤務。2014年に独立し、シノベ写真事務所を設立。雑誌・広告・WEBなど、ポートレートをメインに、料理や商品まで幅広く撮影。旅を愛する出張カメラマンとして奮闘中。 Corporate website Portfolio website

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

提供:Postman株式会社

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21073 2025/04/03 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング