在查询字符串或请求正文中包含数据的Restful URL?

Mar*_*eon 33 rest restful-url

在查询字符串中的REST URL中传递数据与请求正文的经验法则是什么?

即:你正在创建一个添加曲棍球运动员的服务.你可以选择:

PUT /players 
{ "name": Gretzky }
Run Code Online (Sandbox Code Playgroud)

要么

PUT /players?name=Gretzky
Run Code Online (Sandbox Code Playgroud)

如果您传递了大量数据,则需要使用选项#1,因为URL长度有限制.但除此之外,为什么不使用查询字符串来传递数据呢?


更新:删除了您可以在浏览器中测试选项#2的注释.实现(duh)您只能在浏览器中执行GET-s.

Dar*_*ler 32

根据HTTP对PUT的定义,您的第一个请求是使用仅包含一个玩家名称的新列表覆盖玩家列表.它没有添加到玩家列表中.

第二种选择对我来说并没有多大意义.在没有身体的情况下进行PUT与PUT的含义并不完全一致.

考虑到POST的标准定义之一是附加到现有资源,我不确定为什么你不会这样做

POST /players 
{ "name": Gretzky }
Run Code Online (Sandbox Code Playgroud)

如果您确定所有玩家名称都是唯一的,那么您可以像这样使用PUT:

PUT /player/Gretzky
{ "name": Gretzky }
Run Code Online (Sandbox Code Playgroud)

当您决定在HTTP上执行REST时,您同意以RFC2616中定义的方式使用HTTP.这就是统一接口约束的含义.只是为了迂腐,没有REST URL这样的东西,你不能在浏览器中测试任何一个选项,因为没有javascript,你不能在浏览器中做PUT.