クライアントは、「application / json」のacceptヘッダーと「application / json」のcontent-typeで一貫して要求を行います
はい、これは正しいことですが、ベンダーが気にするわけではありません。JSONサービスは常にJSON応答を返すべきだと思うので、私はあなたの不満を完全に理解していますが、そうではない多くの例があります。
プロジェクト全体を通して、この同じプラクティスが2つの異なるベンダーと2つの異なるサービスに適用されています。サービスを変更する必要がある理由を正当化する必要があることに気づきました。ベンダーは、クライアントはこれに対処する必要があると述べており、デフォルトの「箱から出して」これに対処しないため、選択したRESTライブラリでさえ疑問視されています(RestEasy)。
さて、ベンダーに同意する必要があります。それは彼らのサービスであり、彼らがそれを使用するための特別なケースを明確に文書化する限り、あなたは彼らがそれを変更することを本当に課すことはできません。開発者がAPIを採用するのに時間がかかり、開発者が必要とするものに耳を傾けるとそれを変更するため、開発者にとっては不利です。しかし、残念なことに、標準に従う必要があるルールはありません。
質問は何かが足りないのですか?
リクエストヘッダーは、相手側で正しく中断されない限り意味がありません。PHPを使用してWeb APIを開発する場合、リクエストヘッダーで地獄に行くことを知っています。私は何でも対応できます。一方、C#を使用してIISで構成されたサービスは、要求ヘッダー、そのタイプ、および応答タイプの処理をはるかに簡単に提供します。これは、ベンダーがAPIの構築に使用したツールと多くの関係があります。
私はこれについて熱心に思っていますか?
はい、いいえ。これを超えて移動できない開発者の友人がいます。彼らは問題にとても固執し、APIが期待どおりに機能するまで他のタスクを進めることができなくなります。今、それは教訓的です。
ベンダーがタスクを完了するために「より多くの作業」を作成したため、これは問題です。誰もがそれでイライラするでしょう。私はそうなることを知っています。
このシナリオでcontent-typeのapplication / jsonを持たないJSON APIを使用しても大丈夫ですか?
絶対ですが、それは良い習慣ではありません。
クライアントは、サーバーにコンテキストタイプが何であるかを伝えることができるだけrequest
です。のコンテンツタイプを強制する機能はありませんresponse
。クライアントはaccept
、可能なコンテンツタイプのコレクションであることをサーバーに通知することしかできません。
ヘッダーフィールドの定義
Accept request-headerフィールドを使用して、応答に受け入れられる特定のメディアタイプを指定できます。Acceptヘッダーを使用して、インラインイメージのリクエストの場合のように、リクエストが特定の小さなタイプのセットに特に制限されていることを示すことができます。
クライアントがの画像をリクエストすることは可能ですimage/jpeg
が、サーバーは、画像が見つからなかった場合のtext/html
ステータスコードで応答します404
。サーバーも誤って応答する可能性があります。多くのWordpress Webサイトがあり、ページが見つからないファイルに対して応答しtext/html
、ステータスコード200
を返します。
これが、サーバー側のすべての悪い習慣です。私があなたに伝えようとしているのは、それは絶対に可能であり、頻繁に起こるということです。これらのことを構成するとき、人々は何をしているのかわかりません。
参照をいただければ幸いです。商業的な観点からこの状況をどのように解決しますか?
いくつかのプロジェクトでこの問題に遭遇しました。あなたpost
のサーバーへのJSONデータと、それはどちらかJSONまたはHTMLレスポンスを提供します。
応答にどのタイプが含まれているかを知ることは、たいしたことではありません。最初の文字がである{
か、[
JSONを想定できる場合。もしそうなら、<
あなたはHTMLを仮定することができます。それは私が過去にそれを処理した方法です。APIを書いたプログラマーは、HTTPヘッダーについてすべて知っていることがあります。すべてがtext/html
応答として返されます。運が良ければ、Apacheがデフォルトに設定されtext/plain
ていることがあります。
これらの問題は存在し、将来にわたって存在し続けます。サーバー間の通信は、規制されていないアクティビティです。悪いHTTP応答を与えるサーバーの組合からベンダーを追い出す統治体はありません。