30

私はRESTfulAPIを作成しており、ユーザーがキーを作成するプロセスについて考えています。私には次の可能性があります:

  • GETリクエスト/new/<keyname> -非常に簡単ですが、GETは情報の取得や一覧表示を目的としていると聞いたため、これは使用しないと思います。
  • POSTリクエスト先/<keyname> -これは私には簡単でシンプルに思えましたが、リクエストの本文にデータを渡しません。このようにできますか?これは変ですか?
  • /keysリクエスト本文を渡すためのPOSTリクエスト"keyname=SomeKey" -これは正しい方法ですか?

私はこのAPIをjoyentから見て、すべてのPUTおよびPOSTリクエストで、リクエストの本文にいくつかのデータを渡します。これは予想されますか?PUTおよびPOSTリクエストでリクエスト本文を必要としないのは本当に間違っていますか?

4

6 に答える 6

26

私はHttp-WGでこの質問をしました。これは私が得た最も正確な答えでしたhttp://lists.w3.org/Archives/Public/ietf-http-wg/2010JulSep/0276.html

要約すると、POSTは本文を必要としません。同じ正当化がPUTにも適用できると思います。

于 2011-09-06T21:57:37.010 に答える
7

RFC2616は、HTTP1.1の基本RFCです。

最も一般的な形式では、HTTPメッセージは次のとおりです(オプションの本文に注意してください)。

ジェネリックメッセージ=スタートライン
                  *(メッセージヘッダーCRLF)
                  CRLF
                  [ メッセージ本文 ]
start-line = Request-Line | ステータスライン

さらに読むとこれがわかります:

9.5 POST

   POSTメソッドは、オリジンサーバーが
   リソースの新しい部下としてリクエストに含まれるエンティティ
   Request-LineのRequest-URIによって識別されます。..。

9.6プット

   PUTメソッドは、囲まれたエンティティを
   提供されたRequest-URI。..。

   POSTリクエストとPUTリクエストの基本的な違いは
   Request-URIの異なる意味に反映されます。のURI
   POSTリクエストは、囲まれたものを処理するリソースを識別します
   実在物。そのリソースは、データ受け入れプロセス、へのゲートウェイである可能性があります
   他のプロトコル、または注釈を受け入れる別のエンティティ。
   対照的に、PUTリクエストのURIは、囲まれたエンティティを識別します
   リクエストで-ユーザーエージェントは、どのURIが意図されているかを知っており、
   サーバーは、リクエストを他のリソースに適用しようとしてはなりません(MUSTNOT)。

POSTとPUTの両方に、リクエストに含まれるフレーズエンティティが含まれます。

私の読書に基づいて、私は、POSTとPUTの両方にボディが望ましいと信じています(非規範的な説明、私は知っています)。

RESTのコンテキストでは、POSTは作成であり、PUTは更新です。空のオブジェクト(おそらく将来の情報のためのプレースホルダー)を作成することは想像できますが、空の更新をあまり使用することは想像できません。

于 2011-09-06T18:03:12.317 に答える
1

必須ではありません。本文なしでPOST/PUTリクエストを送信し、代わりにクエリ文字列パラメータを使用できます。ただし、パラメータにHTTPで有効でない文字が含まれている場合は、それらをエンコードする必要があることに注意してください。

たとえば、「hello world」をエンドポイントにPOSTする必要がある場合は、次のようにする必要があります:http ://api.com?param=hello%20world

于 2019-07-09T02:59:23.187 に答える
-1

/keysおそらく最良の方法は、3番目のオプションです。POSTtowith keyname=SomeKey

その理由は次のとおりです。たとえば、APIに別の関数を追加したい場合がありますcreate_new_user。その場合、呼び出されたキーをPOSTしようとしているユーザーと、関数create_new_userを使用しようとしているユーザーの違いを区別するのは困難です。create_new_user

GET操作は「取得以外のアクションを実行する意味を持たないようにする必要があります」ので、この操作を実行するためにGETを使用するべきではないと言っているのは正しいです。(RFC 2616)

于 2011-09-06T17:50:24.937 に答える
-1

あなたの質問に一行で答えること。はい、本文に本文/コンテンツが含まれている必要がありますが、必須ではありません(必須)。

于 2015-06-01T20:56:49.507 に答える
-1

okHttp3(Android用のHTTPライブラリ)によると、次のメソッドには本文が必要です:POST、PUT、PATCH、PROPPATCH(WebDAV)、およびREPORT(ソース)。本体なしで指定されたメソッドを使用してリクエストを実行しようとすると、クラッシュすることさえあります。

于 2017-03-10T14:45:20.933 に答える