0

サーバーが n 番目のフィボナッチ数に対応する表現を返す次の URI を検討してください。

GET /fib/0 ==> { value: 0, _links: { next: { href: '/fib/1' } } }
GET /fib/1 ==> { value: 1, _links: { next: { href: '/fib/2' } } }
GET /fib/2 ==> { value: 1, _links: { next: { href: '/fib/3' } } }

...

GET /fib/73 ==> { value: 806515533049393, _links: { next: { href: '/fib/74' } } }

... etc ...

REST を厳密に解釈するという制約がある場合、サーバーは次の要求を受け取ったときに何を返す必要がありますか?

GET /fib 
4

3 に答える 3

2

ウィキペディアでは、コレクション メンバーをリンクとして返し、必要に応じて各メンバーの詳細を返すように指定されています。この場合、無制限であるため、明らかにコレクション全体を返すことはできません。大規模なコレクションで構築した RESTful API は、ページ分割されたコレクションを返します。これがあなたのユースケースで返すのに役立つかどうかはわかりませんが、HAL を使用しているようです。もしそうなら、リンクされたデータの場合は次のようになります。

{
   "_links": {
     "self": { "href": "/fib?page=2" },
     "next": { "href": "/fib?page=3" },
     "prev": { "href": "/fib?page=1" },
     "fibs": [ 
        {"href": "/fib/4" },
        {"href": "/fib/5" },
        {"href": "/fib/6" }
   },
}

またはこれが埋め込まれた場合:

{
   "_links": {
     "self": { "href": "/fib?page=2" },
     "next": { "href": "/fib?page=3" },
     "prev": { "href": "/fib?page=1" },
   },
   _embedded: {
     "fibs": [
        {
          "_links": {"self": "/fib/4" },
          "value": 2 
        },
        {
          "_links": {"self": "/fib/5" },
          "value": 3 
        },
        {
          "_links": {"self": "/fib/6" },
          "value": 5 
        }
   }
}

HAL 仕様でこれと同様の例を見ることができます: https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-00#section-6

pageユーザーがクエリ文字列パラメーターを指定しない場合、最初のページが返されます。

コレクション (ページ分割または全体) を返すことが意味をなさない場合は、405 Method Not Allowed HTTP 応答コードを返すことをお勧めします。コレクションに項目 (POST) を挿入できない場合は、それに対しても同じ 405 応答が返される可能性があります。

于 2012-07-28T00:36:22.523 に答える
0

サーバーは、/ fibで表されるリソースを返すか、そのようなリソースが定義されていない/存在しない場合は404を返す必要があります。リソースが実際に何であるかは、アプリケーションのドメインと要件によって異なります。

于 2012-07-27T23:29:01.713 に答える
0

W3 のDereferencing HTTP URIsによると、無限のシーケンスを返すことができないため、HTTP 303 - See Other別の URI (例: ) へのリダイレクトを返す必要があるようです。この URI/fib/Informationには、人間が読める説明、計算するアルゴリズムなど、フィボナッチ数列に関する追加の関連情報が含まれています。それ、または集約の RDF 記述。消費者が適切な表現を選択できるように、コンテンツ ネゴシエーションをサポートする必要があります。

于 2012-07-28T16:20:07.407 に答える