真に安らかなアプリケーションでは、リンクをたどってリソースにアクセスする必要がありますが、「既知の魔法の URL」だけがアプリケーションのエントリ ポイントになる必要があります。のような直接クエリGET /user/john
は、少なくともリンクを取得した後、/user
または前のリンクで指定された検索 URL からの結果として発行する必要があります。GET /user?username=john
しかし、リンクをたどると、より多くの機能、さらなる開発時間、およびよりスマートなクライアントが強制されるため、実際には、私が作成して使用したほとんどの安静な API は部分的に安静です: それらは明確に定義された URI とメソッドのコレクションであり、すべて以前に知られていました。いくつかのドキュメントによってユーザーに。最終的に、REST が意味するState Transfer
部分は、それらのほとんどに存在しません。
さて、URL が以前から知られているという現実に従って、404
コードが問題になります。次の 2 つの意味を区別する方法404
:
「リソースが見つかりませんが、後でもう一度試すことができます」という意味の正解
404
。例:マリオは登録ユーザーではありませんGET /user/mario
「ここではリソースが見つからないため、この API を間違って使用しています」という意味の API の誤った使用法。例:
GET /foobar/123
これらの 2 つのシナリオを区別することはちょっと重要です。なぜなら、サービス メンテナーとして、彼らは基本的に、それが予想されるエラーであり、心配する必要がない (最初のケース) または予期しないエラーであり、私のクライアントに問題がある (2 番目のケース)
2 番目のケースを表すために、より適切なステータス コードを検索してみました。見つかった最も近いものは、 (ただし、これは満たすことができないヘッダーに406 Not Acceptable
向けられた応答です) と(リソースがないため混乱する可能性があります。ただし、良い点は、その URL を二度と試行しないようにクライアントに指示することです)。それにもかかわらず、この 2 つのいずれも、これを解決するために使用するのに十分ではありません。Accept
410 Gone
それを解決するためにどのようにしましたか、またはどのようにしますか?
Side node : python eveは、この部分で安らかな API になろうとする興味深いプロジェクトですState Transfer
。そのためにHATEOASを実装しています