如果一个API只提供了POST请求的功能,那是RESTful吗?
If an API only provides POST requests functions, is it RESTful?
我不确定我是否正确理解了 RESTful API 的概念。如果我理解正确,这样的 API 应该提供可以使用 GET、POST、PUT 和 DELETE 请求触发的功能。我的问题是:如果一个API只提供POST请求功能,它还是RESTful吗?
是的。 Restful 有一些您应该遵循的准则。只要您正确使用 HTTP 动词,并且关于只有 POSTs 的 URL 命名的良好做法就可以了。另一方面,如果您的应用程序中的 POST 请求也可以删除一条记录,那么我不会将其称为 Restful.
你应该看看 this lecture and read this article。
REST 与您使用多少可用的 HTTP 方法无关。所以,快速的回答是:是的,它可以被认为是"restful"(无论实际意味着什么)。
Buuut ... 很可能 - 不是 。而且这与滥用 POST
调用无关。
这个神奇 "RESTfulness" 的主要指标与您发出 HTTP 请求的方式无关(方法和漂亮的 URL 毫无意义 作为决定因素毫无价值)。
重要的是返回的数据,以及通过查看此数据,您是否可以了解与任何给定端点中的资源相关的其他资源和操作。它基本上是关于发现能力。
REST 一段时间以来是一个被误用的术语,社区尤其是 Whosebug 的社区甚至不关心它的实际意图,即分布式系统中客户端与服务器 API 的 解耦。
客户端和服务器通过遵循某些建议来实现解耦,例如避免有状态连接,其中客户端状态存储在服务器上并由服务器管理,使用资源的唯一标识符 (URI) 以及进一步的可缓存性等可取功能减少服务器和客户端必须执行的工作量。而 Fieldings dissertation lists 6 constraints, he later on explained some further rules applications following the REST architectural style have to follow 以及系统通过遵循这些获得的好处。其中包括:
- API不应该依赖于任何单一的通信协议,并且遵守而不违反所使用的底层协议。尽管 REST 大多数时候是通过 HTTP 使用的,但并不局限于此协议。
- 高度关注资源及其通过媒体类型的呈现。
- 客户不应该对 API 中的可用资源或其返回状态 ("typed" resource) 有初步的了解或假设,而是通过发出的请求和分析的响应即时学习它们。这使服务器有机会在不破坏客户端实现的情况下轻松移动或重命名资源。
所以,基本上,如果您将自己限制在 HTTP 上,那么您已经以某种方式违反了 REST 试图强加的一般思想。
正如@tereško 提到的 Richardson 成熟度模型,我想澄清一下,这个模型在 REST 的范围内是相当无稽之谈。即使达到级别 3,也不意味着此架构遵循 REST。任何未达到级别 3 的应用程序都不会遵循这种架构风格。请注意,仅部分遵循 REST 的应用程序实际上并未遵循它。要么对,要么不对。
关于 RESTful
(论文不包含该术语),通常人们认为基于 JSON 的 API 通过 HTTP 公开。
针对您的实际问题:
基于此引用
... such an API should provide functions you can trigger with GET, POST, PUT & DELETE requests
就 REST 架构风格而言,我会说“不”,因为您基本上使用这样的 API 进行 RPC 调用(如果您愿意,可能是一种宽松的基于 JSON 的 SOAP),限制自己使用 HTTP仅且不完全使用底层 HTTP 协议的语义;如果你关注基于 JSON 的 HTTP API 人群,答案可能是 这取决于你问的是谁 因为这个词没有精确的定义 "RESTful" 国际海事组织。如果您触发功能而不是服务器上的资源,我也会在这里说不。
我不确定我是否正确理解了 RESTful API 的概念。如果我理解正确,这样的 API 应该提供可以使用 GET、POST、PUT 和 DELETE 请求触发的功能。我的问题是:如果一个API只提供POST请求功能,它还是RESTful吗?
是的。 Restful 有一些您应该遵循的准则。只要您正确使用 HTTP 动词,并且关于只有 POSTs 的 URL 命名的良好做法就可以了。另一方面,如果您的应用程序中的 POST 请求也可以删除一条记录,那么我不会将其称为 Restful.
你应该看看 this lecture and read this article。
REST 与您使用多少可用的 HTTP 方法无关。所以,快速的回答是:是的,它可以被认为是"restful"(无论实际意味着什么)。
Buuut ... 很可能 - 不是 。而且这与滥用 POST
调用无关。
这个神奇 "RESTfulness" 的主要指标与您发出 HTTP 请求的方式无关(方法和漂亮的 URL 毫无意义 作为决定因素毫无价值)。
重要的是返回的数据,以及通过查看此数据,您是否可以了解与任何给定端点中的资源相关的其他资源和操作。它基本上是关于发现能力。
REST 一段时间以来是一个被误用的术语,社区尤其是 Whosebug 的社区甚至不关心它的实际意图,即分布式系统中客户端与服务器 API 的 解耦。
客户端和服务器通过遵循某些建议来实现解耦,例如避免有状态连接,其中客户端状态存储在服务器上并由服务器管理,使用资源的唯一标识符 (URI) 以及进一步的可缓存性等可取功能减少服务器和客户端必须执行的工作量。而 Fieldings dissertation lists 6 constraints, he later on explained some further rules applications following the REST architectural style have to follow 以及系统通过遵循这些获得的好处。其中包括:
- API不应该依赖于任何单一的通信协议,并且遵守而不违反所使用的底层协议。尽管 REST 大多数时候是通过 HTTP 使用的,但并不局限于此协议。
- 高度关注资源及其通过媒体类型的呈现。
- 客户不应该对 API 中的可用资源或其返回状态 ("typed" resource) 有初步的了解或假设,而是通过发出的请求和分析的响应即时学习它们。这使服务器有机会在不破坏客户端实现的情况下轻松移动或重命名资源。
所以,基本上,如果您将自己限制在 HTTP 上,那么您已经以某种方式违反了 REST 试图强加的一般思想。
正如@tereško 提到的 Richardson 成熟度模型,我想澄清一下,这个模型在 REST 的范围内是相当无稽之谈。即使达到级别 3,也不意味着此架构遵循 REST。任何未达到级别 3 的应用程序都不会遵循这种架构风格。请注意,仅部分遵循 REST 的应用程序实际上并未遵循它。要么对,要么不对。
关于 RESTful
(论文不包含该术语),通常人们认为基于 JSON 的 API 通过 HTTP 公开。
针对您的实际问题:
基于此引用
... such an API should provide functions you can trigger with GET, POST, PUT & DELETE requests
就 REST 架构风格而言,我会说“不”,因为您基本上使用这样的 API 进行 RPC 调用(如果您愿意,可能是一种宽松的基于 JSON 的 SOAP),限制自己使用 HTTP仅且不完全使用底层 HTTP 协议的语义;如果你关注基于 JSON 的 HTTP API 人群,答案可能是 这取决于你问的是谁 因为这个词没有精确的定义 "RESTful" 国际海事组织。如果您触发功能而不是服务器上的资源,我也会在这里说不。