3

私は新しいメソッド呼び出しを書いている安らかなWebサービスを持っています。新しいメソッド呼び出しの目的は、人のステータスを「NO」に取り消すことです。

リクエストで送信する必要があるのは、ステータスを「NO」に変更する必要がある Person_Id だけです。

これを行うには PUT または POST を使用する必要がありますか?

put を使用する場合、person_id をパス パラメーターとして送信し、xml をまったく使用しないことはできますか。 (like : http://serverName/PersonServices/Person/123456)サービスレイヤーには、このようなコードがあります。

    @PUT
    @Path("/Person/{person_Id}")
    @Consumes("application/xml")
    @Produces("application/xml")
    public JAXBElement<GetUsageTokenType> updateLicenseStatus(
            @PathParam("person_Id") final Long personId) {

            //code to change the status
     }

それとも、これを行うために POST を使用する必要がありますか? POST を使用する場合、xml 形式で送信する必要があると言うのは正しいですか?

4

3 に答える 3

3

どのHTTPメソッドがどのCRUDメソッドに一致するかを見てみると? マッピングが表示されます

Create = PUT with a new URI
         POST to a base URI returning a newly created URI  
Read   = GET  
Update = PUT with an existing URI  
Delete = DELETE

各動詞の定義についてHTTP RFCを読むと、その理由がわかります...

に応答して:

person_id をパス パラメータとして送信し、xml をまったく使用しないことはできますか

理想的にはあなたのURL

http://serverName/PersonServices/Person/123456

おそらくあるはずです

http://serverName/PersonServices/RevokePerson/123456

これは、XML/JSON/etc を渡したくない場合の保守性に役立ちますが、人間が読める URL が RESTful サービスの機能であるかどうかは、非常に重要な議論です。

コメントで示唆されているように、RESTful API はアクションではなくコンテンツに焦点を当てる必要があります。参照: REST 実装の URI にアクション動詞を含めると、プロトコルに違反するのはなぜですか? 例えば。

したがって、人を URL に渡すと、HTTP 動詞に基づいて、関連する CRUD アクションが実行されます。ID だけを渡したい場合は、ID に PUT するときにどの更新を行うかを推測する必要があります...これまでに他の更新が決してないことがわかっている場合を除きます。

于 2012-10-03T13:58:07.047 に答える
0

POST次の URL にアクセスすることをお勧めします。

http://serverName/PersonServices/Person/123456

ただし、空の本文を POST するべきではありません。標準の POST 本文パラメーター構文で、更新するフィールドを本文に含める必要があります。

例えばstatus=NO

個々の (または複数の) フィールドの更新については、これが最善の方法だと思います。たとえば、リクエストでいくつかのフィールドを更新する必要がある場合は、次を使用できます...

firstName=Jesse&status=YES

このようにして、URL はそれらがリソースに対応しているという事実を維持します (RevokePersonまたは同様のパス引数を含めた場合のようなアクションとは対照的に)。これにより、実行したい操作ごとにさまざまな URL エンドポイントの束を回避することで、API の汚染を最小限に抑えながら最大限の柔軟性が得られます。

于 2012-10-03T14:23:25.600 に答える
0

サーバーの実装方法によって異なりますが、適切な REST 原則に従って、PUT を使用することをお勧めします。

于 2012-10-03T13:54:06.170 に答える