8

API の設計を開始し、REST/HATEOAS に準拠させることにしました。API のエントリ ポイントは何にする必要がありますか?

一般的なもののように思えますが、実際には取得するためのリソースがないため、GET /を使用する方が論理的に理にかなっている可能性があります。OPTIONS //

ここでは、JSON のHAL構文をハイパーメディア形式として使用して、両方の例を示しました。

得る /

リクエスト:

GET / HTTP/1.1
Host: example.com

応答:

HTTP/1.1 200 OK
Date: …
Content-Type: application/json;charset=utf-8
Content-Length: 143

{
    "_links": {
        "self": {
            "href": "/"
        },
        "penguins": {
            "href": "/penguins"
        }
    }
}

オプション /

リクエスト:

OPTIONS / HTTP/1.1
Host: example.com

応答:

HTTP/1.1 200 OK
Date: …
Allow: OPTIONS
Content-Type: application/json;charset=utf-8
Content-Length: 143

{
    "_links": {
        "self": {
            "href": "/"
        },
        "penguins": {
            "href": "/penguins"
        }
    }
}
4

2 に答える 2

2

リクエストに対するレスポンスには、OPTIONSリクエストしたリソースのオプションのみが記述されています/GET /一般に、応答本文の各リンクごとのリンク関係から、リンクされたリソースで実行できるアクションを確認する方がはるかに有益です。

また、 への応答OPTIONSはキャッシュできません。これは、特にリンクのメニューのような静的なものに関しては、非常に重要です。

于 2013-10-30T04:56:01.450 に答える
2

この単純なケースでは、Link ヘッダーの使用をお勧めします。

HTTP/1.1 200 OK
Date: …
Link:</likeapenguinbutopaque>;rel=penguin;type=image/jpeg

「rel」属性を使用すると、リンクによって参照されるターゲット リソースとの関係を指定することもできます。「rel」のセマンティクスは、現在のリソースのコンテキストで解釈する必要があることに注意してください。それを説明するために、リンクをたどってみましょう。ペンギンの写真と、次のリンクが返されるはずです。

Link : <>; rel=wing;type=image/jpeg

ここで「翼」の関係は明らかです。これは、ペンギンである現在のリソースと、それ自体の翼 (別のペンギンの翼ではない) との関係です。これが HATEOAS の魔法 (および冗長性) です。各リンクは、特定のリソース コンテキストでのみ意味を持ちます。これはすべて、ブラウジング中に特定の機会に返される 1 つのドキュメントにすべてのリソース ツリーを記述したいという誘惑に打ち勝つためです。これは悪だ、ええと、HATEOAS ではありません...

また、HATEOAS は、メディア タイプがハイパーメディアではない JPEG 画像を交換する際に実装されていることにも注意してください。Link ヘッダーは、普及していて十分に豊富で、その役目を果たします。あなたが持っているペンギンのいくつかを更新できるとします:

Link: <>;rel=wing;allow=PUT;type=image/jpeg

指定された更新可能なペンギンの正確なコンテキストでポイントを通知します。

于 2015-04-02T16:02:56.717 に答える