REST API:カスタムHTTPヘッダーとURLパラメーター


96

REST APIのリクエスト部分でカスタムHTTPヘッダーを使用するのはいつですか?

例:

使用しますか

GET /orders/view 
(custom HTTP header) CLIENT_ID: 23

の代わりに

GET /orders/view/client_id/23 or 
GET /orders/view/?client_id=23

回答:


123

URLはリソース自体を示します。「クライアント」は実行可能なリソースであるため、ベースURLの一部である必要があります /orders/view/client/23

パラメータは、リソースへのアクセスをパラメータ化するためのものです。これは特に投稿と検索に関係します /orders/find?q=blahblah&sort=foo。パラメータとサブリソースの間に細い線があります /orders/view/client/23/active versus /orders/view/client/23?show=active。サブリソーススタイルと検索用の予約パラメーターをお勧めします。

各エンドポイントは状態転送を表すため(ニーモニックを壊すため)、カスタムヘッダーは、リソースの名前(URL)、リソースの状態(本体)、またはパラメーターを直接含まないものにのみ使用する必要がありますリソース(パラメータ)に影響を与えます。これにより、カスタムヘッダーのリクエストに関する真のメタデータが残ります。

HTTPには、必要なほとんどすべてをカバーする非常に幅広いヘッダーの選択肢があります。カスタムヘッダーが表示されるのは、ユーザーに代わって動作するシステム間要求です。プロキシシステムはユーザーを検証X-User: useridし、ヘッダーに「」を追加し、システム認証情報を使用してエンドポイントにアクセスします。受信側システムは、システム資格情報がユーザーに代わって動作することを承認されていることを検証してから、ユーザーがアクションを実行することを承認されていることを検証します。


そのような包括的な答えをありがとう!悪意のあるプロキシ(ヘッダーを削除する)のリスクが依然として高いモバイルAPIにX-Userを引き続き使用しますか?
Vasile Cotovanu 2012

1
いいえ、私が言及したX-Userの使用は、システムがサードパーティに代わって動作しているシステム間接続での使用です。たとえば、ユーザーUはサーバーAと通信します。サーバーAは、資格情報をX-Userヘッダーと共にサーバーBに提示し、「資格情報を使用して、ユーザーUに代わってこのアクションを実行する権限があることを確認します」と言います。これはサービス指向アーキテクチャで登場し、通常はHTTPSを使用しています。モバイルプラットフォームは、ほとんどの場合、ユーザー自身が行動し、トランザクションには適切な一人称資格情報を使用する必要があります。
Nialscorva

7
3番目の段落は、SOで読んだ中で最も有益な回答の1つです;-)
Alistair77

1
@Nialscorva素晴らしい説明!承認されたコンテナ(モバイルアプリなど)を介してユーザーにAPIを操作させたい場合はどうなりますか?私が今行っているのは、モバイルアプリがそれ自体でアクションを実行することを許可されておらず、エンドユーザーも許可されていないことです。ユーザーがアクションを実行する場合は、両方の資格情報が存在する必要があります。
bolbol 2013年

6

カスタムヘッダーには次の利点があります。

  • ネットワークツール/スクリプト(認証、メタ情報など)で簡単に読み取ることができます。
  • セキュリティ上の問題からURLを解放します(ブラウザ/プロキシキャッシュではなく、より安全です)
  • URLをよりクリーンに保つ:リソースのより良いキャッシュを可能にします

それらは、プロキシによってサイレントに除去/フィルタリングすることもできます
fusi

:@fusi良い点...ここでそれについてのトピックですstackoverflow.com/questions/20820572/...
クリストフRoussy

5

標準または規則で情報を渡す方法が他にない場合のみ、カスタムヘッダーを使用します。Darren102は、その値を渡す一般的な方法を説明しています。APIは、カスタムヘッダーを使用して典型的なパターンとversを使用することにより、はるかに親しみやすくなります。つまり、それらを使用するケースがないわけではなく、それらが最後の手段であり、HTTP仕様でまだ処理されていないものである必要があります。


心から同意します...タスクを達成するための標準的な方法がある場合は、ホイールを再発明しないでください。
アレッサンドロサンティーニ

5

REST APIのリクエスト部分で... HTTPヘッダーを使用するのはいつですか?

認証:GUID、基本認証、カスタムトークンなど。たとえば、 ユーザー名/パスワードの代わりにREST APIのGuidトークンを使用した基本認証

PCI-DSSまたはその他のセキュリティルールでカバーされるドメイン間でトークンやその他の認証のような情報を渡すことに関与する場合、一部の規制では認証要素を明示的に再生できないURLから除外する必要があるため、パラメータを埋める必要がある場合があります(からブラウザの履歴、プロキシログなど)。


1

RESTの標準はありませんが、受け入れられる方法は

GET /orders/view/23

カスタムヘッダーを使用しないため、23アフタービューはIDであると見なされるため、IDを取り込んでその情報のみを生成する関数を使用します。


1

プロキシがそれらを渡すかどうかがわからないので、カスタムヘッダーは使用しません。URLベースが進むべき道です。

GET / orders / view / client / 23


1
カスタムヘッダーもお勧めしませんが、プロキシの破損が原因ではありません。プロキシが壊れているため、修正する必要があります。
Julian Reschke

1

間違いなくOK:

GET /orders/view/client_id/23 or 
GET /orders/view/?client_id=23

またOK:

GET /orders/view/23 or 

これも大丈夫だと思います:

POST /orders/view 
(custom HTTP header) CLIENT_ID: 23

REST-ful POST応答は、Locationヘッダーが「/ orders / view / 23」などに設定されたHTTP 303である必要があります。
リッチレマー2015

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.