17

私はいくつかの REST チュートリアルを読んでいますが、データを REST API に送信するには、投稿データを配列として送信する必要があると述べているものもあります。これは次のようなものです。

$data = array('foo' => 'bar');
$rest->post($data);

次に、次のような JSON データを送信する必要があると言う人もいます。

$data = array('foo' => 'bar');
$data = json_encode($data);
$rest->post($data);

これを行う標準的な方法があるかどうか、または問題がないかどうかはわかりませんが、API を設計するときに一般的に推奨される方法は何ですか?

編集:混乱しているようです。明確にするために、クライアントの消費にはJSONを使用する必要があることに同意しますが、この質問はサーバーの消費に関するものです。SERVER がクライアントから JSON または POST データを受け入れる必要があることを意味しますか?

4

7 に答える 7

7

あなたが RESTful API を作成している場合、つまりアプリケーションがサーバーであり、リクエストを受け入れている場合、あなたの質問は混乱しているように見えます。POSTアプリケーションはデータを送信しません。クライアントはあなたにデータを送信POSTします。

そうは言っても、JSON でエンコードされたリクエストを受け入れる API を持つことは可能ですが、実際には非常にニッチなシナリオでしか役に立ちません。大多数のクライアントは、データを API に POSTapplication/x-www-form-urlencoded形式で送信します。PHP はこれをバックグラウンドで処理し、データを$_POSTスーパーグローバルとして公開します。

POST リクエストへの応答について話している場合、どの形式を使用する必要があるかは、クライアントAcceptが送信する形式によって異なります。クライアントはヘッダーでこれを指定するか、一部の API で許可されます。 URL で指定する必要があります (例:foo.com/some/thing/123.jsonまたはfoo.com/some/thing/123/json)。クライアントは、必要なフォーマットをアプリケーションに伝える必要はないので、適切なデフォルトを選択するのはあなた次第です。最近では、ほとんどの API で JSON が使用されます。

ただし、シリアル化された PHP 配列形式を理解する API については聞いたことがありません。そのため、あなたがどのリソースを読んでいるのかわかりませんが、彼らが提案していることを誤解していたことは間違いありません。

于 2012-08-11T21:13:32.770 に答える
1

API を使用するクライアントについて考える必要があります。HTML5\AJAX クライアントはおそらく JSON データを必要とするでしょうが、他のクライアント (Silverlight またはネイティブ モバイル アプリ) は XML の使用に適している可能性があります。

REST API を作成するための優れたフレームワーク/プラットフォームの 1 つは、Microsoft の Web API (ASP.NET MVC に基づく) です。この製品は WCF フレームワークを継承し、ユーザーが MVC 環境で REST API を作成できるようにします。1 つの機能は、HTTP Accept ヘッダーに基づいてシリアル化プロバイダーを選択することです。

したがって、クライアントが application/json を受け入れる場合、JSON でサービスを処理し、XML を受け入れる場合は XML でサービスを処理します。独自のオブジェクト シリアライザーを作成して、フレームワークにプラグインすることもできます。

詳細: http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/video-your-first-web-api

于 2012-08-11T20:57:45.847 に答える
1

ほとんどの場合、POST データの受信に固執したいと思いますが、json データの受信には、たとえばバッチ リクエストに関しては用途があると思います。

Facebook API はこれを使用します。

する必要はありませんfile_get_contents('php//input')。Facebookのドキュメントから、次のようなことができます:

curl -X POST "http://example.com/batch" -d 'batch={ "param" : 1, "param2" : "2"}'

次に、PHP コードで、PHP を使用している場合は、$_POST パラメーターを介して取得し、json_decode を実行できます。

var_dump($_POST);

array(1) {
  ["batch"]=>
  string(30) "{ "param" : 1, "param2" : "2"}"
}

var_dump(json_decode($_POST['batch'], true));

array(2) {
  ["param"]=>
  int(1)
  ["param2"]=>
  string(1) "2"
}
于 2012-10-04T02:36:54.390 に答える
0

ポイントは、既存の HTTP 実装を再利用することです。

HTTP は多くの異なるコンテンツ タイプを受け入れるように構築されており、ヘッダーで使用するものを指定するだけで済みます。

さまざまな形式を受け入れ、content-type ヘッダーで動作する REST API が更新されています。HTML ウェブページから x-www-form-urlencoded 値を送信するか、生の JSON を使用して AJAX リクエストを行うことができます。全員がプロトコルに従っている限り、混乱はありません。

開発者は、すべてをサポートすることはできないため、アプリが提供するサポートを選択する必要があります。通常、それは自分の環境のサポートまたは利便性に帰着します。誰も車輪を再発明したくありません。

API の構築を念頭に置いて設計された多くのフレームワークは、最も一般的なコンテンツ タイプを下位レベルで処理します。また、 「Accept」ヘッダーに従って応答データをエンコードする場合もあります。

最もよく使用されると思われるものを最初に実装するか、既に HTTP を話してそのすべてを処理してくれるフレームワークを見つけてください。

于 2016-12-08T23:24:02.553 に答える
0

私は現在開発中ですREST APIが、同じ質問を自問していました。いくつかの調査の後、それは標準ではなく、完全にあなた次第であることがわかりました.

サーバー側を開発しているため、データの送信方法を決定できます。クライアントはあなたのデザインに適応する必要があります。

個人的には、すべてPOSTPUTデータをJSON直接本体で受け取ることを選択します。

于 2014-04-17T14:32:32.747 に答える
0

JSON は言語に依存せず、API のスケーリング時に役立つ可能性があるため、より理にかなっています。

于 2012-08-11T20:47:07.910 に答える