19

決めるのは難しいです。
現在、データを x-www-form-urlencoded として php lib curl で送信しています

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->arguments));

また

curl_setopt($curl, CURLOPT_POSTFIELDS, $this->arguments);

最初の質問: 2 番目の方がコンテンツの長さが長いようですが、最初の解決策の方がおそらく優れていますか?

次のようなフラットなメッセージには実用的です。

{
    "name": "John",
    "token": "2121232145",
    "code": "7",
    "data": "Hello"
}

しかし、オブジェクトを表すデータ フィールドを持つこともできます。この場合はそれをエンコードしていましたが、それを行う (Json を URL エンコードする) ことは非常に冗長で醜いメッセージです。

反対側では、それを application/json content-type として送信してみました

curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($this->arguments));

小さいメッセージの場合、コンテンツの長さは大きくなりますが、json が埋め込まれている場合は、明らかに優れています。

しかし、x-www-form-urlencoded は、json が埋め込まれている場合を除いて、送信する必要があるフォーム データにも近いです。

コンテンツ タイプに応じて 2 つの異なるサーブレット解析メソッドを使用するのはエレガントではないため、別のオプションはありますか?

4

2 に答える 2

18

ここでは、フォーマットに関する同様の議論を読むことができます。

エンコードされたデータの構造が名前と値のペアのフラットリストであることが保証されている場合は、x-www-form-urlencodedで十分と思われます。構造が(任意に)複雑になる可能性がある場合(たとえば、ネストリストや連想配列)、必ずJSONを使用してください。

私はKISSの達人です。あなたの状況では、JSON / XML /時間、メモリ、CPUサイクルの追加コストは何でも。x-www-form-urlencodedデータは、読みやすさとコンパクトさを兼ね備えているので、あなたの選択だと思います。

于 2012-11-19T15:56:39.067 に答える
11

x-www-form-urlencodedと JSON は別のものです。x-www-form-urlencodedは、フォームをサーバーに送信するために使用される単なるデフォルトのコンテンツ タイプですが、JSON は、ネットワーク接続を介して構造化データをシリアル化し、送信するために使用される、テキストベースで人間が判読できる形式 (標準) です。それらを比較するべきではありません。

2 つ目はコンテンツの長さが長いようですが、最初のソリューションの方が優れているのではないでしょうか?

いいえ、「より良い」というラベルの付いた解決策はありません。pinepain が言ったように、送信するデータの種類と、それを解析/処理する方法によって異なります。JSON は、リクエストで追加データを送信するのに最適です。

コンテンツの長さについて考えないでください。送信するデータとデータ構造を考えて処理します。リクエスト間で構造化データを送信して処理するだけで、データ サイズが異なる場合は、単純に JSON を使用します。このために構築されています。

Content-Lengthアプリは Facebook、Twitter、または Google のようなモンスターではないため、2 つの方法の違いは問題にはなりません。時期尚早の最適化は諸悪の根源です。

于 2012-11-19T13:06:59.610 に答える