HTTP応答コードの状況は、重みと測定値に入れることができます。これは、仕様の善意の開発者が残忍な現実に直面したときに起こることです。2つの残酷な現実があっても。
第10章で説明したように、セマンティックエラーの目的の1つは、クライアントがエラーの原因を理解できるようにすることです。HTTP仕様(特にRFC 7231)の開発では、この目標は明らかに主要な目標の1つでした。さらに、Fjeldingが彼の論文で説明したRESTのアーキテクチャ上の制限は、クライアントがエラーのセマンティクスを理解する必要があるだけでなく、「階層化」アーキテクチャのクライアントとサーバー間のすべてのネットワークエージェント(プロキシ)を理解する必要があることを示唆しています。そして、これによると、HTTPステータスコードの命名法は、HTTPリクエストで発生する可能性のあるほとんどすべての問題を非常に詳細に説明しています:無効なAccept-*
ヘッダー値、欠落Content-Length
、サポートされていないHTTPメソッド、長すぎるURIなど。
しかし、RFCがまったく役に立たないのは、クライアントまたはプロキシが実際にエラーで何をすべきかという問題です。すでに説明したように、バグは回復可能または回復不可能な場合があります。エラーが致命的である場合、クライアントは概して、ステータスコードとヘッダー、さらには中間プロキシを使用して、このすべてのパセリについて気にしないでください。実際、これには3つのコードで十分です。
400
永続的なエラーの場合(リクエストを繰り返すだけでは、エラーはどこにも行きません)。404
不確実性のステータス(要求を繰り返すと異なる結果が得られる場合があります)。500
サーバー側の問題に加えて、Retry-After
いつ戻るかをクライアントに通知するヘッダー。
補足:ちなみに、仕様設計の問題に注意してください。デフォルトでは、すべての4xx
コードは除いて、キャッシュされません:404
、405
、410
、414
。これが善意で行われたことは間違いありませんが、この微妙さを知っている人の数は、仕様の編集者の数とほぼ同じであると思われます。その結果、404
-kiが誤って返されたが、クライアントがそれらをキャッシュし、それによってfakupが無期限に延長された場合、多くの状況が発生します(作成者は、そのうちの1つの結果を個人的に調べました)。
— , - - . , 411 Length Required
. — . , :
400 Bad Request
, . , , — ! , , — REST.
NB: ,
400
, .. URI, , JSON ..,422 Unprocessable Entity
412 Precondition Failed
. , .
403 Forbidden
/ .Forbidden
-, :
- — ;
- — ;
- — ;
- — ;
- — - .
403
, (, ) .
409 Conflict
;
.
, / , — , 400
-, .
: , : ‘The response message will usually contain a representation that explains the status’. , , , , ( - ?), REST: , «» , .
, : - «» HTTP, . . Web - . , , , , , -. : , - — .
, . ¯\_(ツ)_/¯. — 401 Unauthorized
: WWW-Authenticate
— , , , , .. — Basic
(-, - Web 1.0, ). , , realm
- — . 401
— WWW-Authenticate
, , .
: - HTTP , ; ; - , . ( , , — , , , .) , , 200
-.
?
:
REST RPC. - HTTP . :
200 OK
, —200
.500 Internal Server Error
.
400 Bad Request
. , API Gateway;
« » — , , , . ; — - . .
NB: , : RPC- , , - - (,403
429
, - - , HTTP). , , , «» . ;
. , :
- HTTP- , HTTP (..
406 Unacceptable
Accept-Language
, , - ); - , HTTP ( , ; ) — , -
X-My-API-Error-Reason
; - , . - ( );
- , -, , .
- HTTP- , HTTP (..
, , #3 .
-このテキストは、私の本のHTTPAPIに関する将来のセクションの準備の一環として書かれました。作業はGitHubで行われています。
誰かがredditでそれを暴言した場合、私は感謝します、私自身、redditの規則に従って、できません。