Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTTP谓词和内容协商或获取REST服务的字符串?_Http_Rest - Fatal编程技术网

HTTP谓词和内容协商或获取REST服务的字符串?

HTTP谓词和内容协商或获取REST服务的字符串?,http,rest,Http,Rest,我正在设计一个REST服务,并试图权衡使用完整的http谓词数组和内容协商与GET字符串变量的利弊。我的选择会影响可缓存性吗?这两种解决方案可能都不适用于每个领域 哪一个最适合crud和查询(例如?action=PUT) 哪一种最适合挑选api版本(例如?版本=1.0) 哪一种最适合返回数据类型(例如?type=json)?CRUD/查询最好用HTTP动词表示。创建和更新通常是PUT或POST。检索就是获取。删除就是删除。这就是通常的映射。主要的一点是GET不会引起副作用,而且动词做了你期望它们

我正在设计一个REST服务,并试图权衡使用完整的http谓词数组和内容协商与GET字符串变量的利弊。我的选择会影响可缓存性吗?这两种解决方案可能都不适用于每个领域

哪一个最适合crud和查询(例如?action=PUT)

哪一种最适合挑选api版本(例如?版本=1.0)


哪一种最适合返回数据类型(例如?type=json)?

CRUD/查询最好用HTTP动词表示。创建和更新通常是PUT或POST。检索就是获取。删除就是删除。这就是通常的映射。主要的一点是GET不会引起副作用,而且动词做了你期望它们做的事情

如果这是传递该操作的唯一方法(例如,http客户端库不允许发送非GET/POST请求),那么将该操作放入URI中是可以的。不过,大多数库都会这样做,因此强烈建议不要通过URL传递动词

对API进行版本设置的“最佳”方法是在每个请求的基础上使用HTTP头;这允许客户端升级/降级特定请求,而不是每个请求。当然,这种版本控制的粒度需要在一开始就考虑进去,这可能会使服务器端代码严重复杂化。大多数人只是使用URL访问服务器。一个较长的解释是

没有最佳返回数据类型;这取决于你的应用程序。JSON对于Ajax网站可能更容易,而XML对于想要用Xpath查询的复杂结构可能更容易。协议缓冲区是第三种选择。它还讨论了在URL或HTTP头中指定返回协议是否更好

在大多数情况下,头对缓存的影响最大,因为代理在被告知时应该尊重它们,用户代理也是如此(不过,显然UA的行为不同)。仅基于URL的缓存非常依赖于层。一些用户代理不缓存任何带有查询字符串的内容(Safari、iirc),代理可以根据自己的需要自由缓存或不缓存