RESTful(或任何)类型的服务器是否只使用POST路由进行数据创建?例如,如果我要说我需要从服务器获取一些过滤数据,有些人会建议将这些条件放在POST路由的主体中。
但是,一些开发人员还建议将这些条件放在GET路由中,并使用url参数或url查询来获取数据。后者的相同开发人员也会告诉我,无论何时调用POST路由,都应该创建一些东西,例如在数据库中。
对我而言,似乎更好的做法是使用GET进行查询以保持RESTful。我想知道保留POST路由的基本查询有多重要,为什么? (如果它很重要的话)
答案 0 :(得分:3)
由Fielding定义的REST的主要特征是uniform interface。
要拥有统一的界面,您需要标准化您正在使用的协议元素。
HTTP方法的通用标准是RFC 7231。它定义GET
用于检索表示,其中可以包括“过滤数据”。它将GET
定义为safe和cacheable。
想象一下,您正在撰写通用RESTful客户端。您可以假设GET
将检索所请求URL的表示。您可以缓存对GET
的回复。您可以针对错误重试GET
次请求(因为它是安全的)。这一切都非常有用。
但是POST
被定义为一种通用的,全能的方法。它不仅缺乏自己的语义,而且RFC 7231说(强调我的):
POST方法请求目标资源处理 根据资源的请求包含在中的表示 拥有特定的语义。
因此,在您的通用RESTful客户端中,您不能假设有关POST
的任何内容,因此您无法对其进行任何有用的操作。
因此GET
是统一界面的一部分,而POST
则不是。GET
。从这个意义上讲,POST
是“更加RESTful”。
也就是说,您可以为Content-Type: application/data-filter
请求设计一个新标准,例如使用Content-Type
,具有有用且定义明确的语义。它会与RFC 7231的上述文本相矛盾,但无论如何,如果你有足够多的人同意你(可能在你的组织内),你就会有一个统一的界面。
顺便说一下,有人试图standardize a SEARCH
method这样的事情。这可以作为统一的界面(与标准化的SEARCH
一起使用)。不幸的是,该提案已经停滞,因此您可能不应该使用buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.25.4'
}
。