我发现标准REST最佳实践非常混乱,因为您需要了解所有HTTP方法,如GET/POST/PUT/DELETE/修补程序等等。不仅如此,在调用API时,您可能需要提供以下内容:
在我看来,这不仅使服务器开发人员感到困惑,也使客户机感到困惑。
因此,我想知道,是否有任何具体的理由,有多种方法而不是有一个统一的方式?是为了安全措施吗?
如果你能提供一些来自IETF,RFC,甚至ISO文档的实质性参考,而不是你的个人意见,我会很高兴。
发布于 2018-11-15 03:41:09
因此,我想知道,是否有任何具体的理由,有多种方法而不是有一个统一的方式?是为了安全措施吗?
不,这不是为了保安。
标准方法变化的原因是,我们现在可以使用理解这些语义的泛型组件来为我们做大量的工作。
例如,使用标准REST方法,标准方法意味着可以通过通用组件自动处理缓存失效。这意味着,当响应在不可靠的网络上丢失时,泛型组件可以知道哪些请求要重新发送,哪些不能。
如果你能提供一些来自IETF,RFC,甚至ISO文档的实质性参考,而不是你的个人意见,我会很高兴。
您应该从Fielding的论文开始,特别是第六章,他回顾了“从应用REST中吸取的经验和教训”,以“指导现代网络体系结构的设计和开发”。
Jim的talk 基于域驱动的RESTful系统设计是另一个很好的选择,尤其是演讲早期的基础材料。
发布于 2018-11-15 04:22:01
REST和HTTP实现的REST不是一回事。
Restful服务只是在一个请求/响应对中完成交互的服务。
Restful服务器在完成请求/响应后不会维护会话或任何活动状态信息。要创建会话的假象,每个请求都包含所有标识信息、一个操作--通常是基于CRUD的操作(但不一定),以及所有所需的额外数据。如果忽略了请求的任何部分,服务器就不会查询它,也不会维护等待它的会话。它会以错误响应,可能会识别原因,然后关闭连接。否则,服务器将处理请求,返回响应,然后忘记有关请求/响应对的所有细节。下一个请求必须提交完整的详细信息,即使许多请求与前一个请求相同。
从开发和维护的角度来看,这有很多好处。它保持了交互简单,系统模块化,并创建了强大的边界,这使得测试(和单元测试)更容易和更快。状态的简化也使得生产中的水平缩放变得容易得多。
REST by HTTP利用HTTP协议提供面向CRUD的Restful接口。与连接(tcp/ip)、安全性(ssl)、身份验证(oauth)、服务命名(域名、url路径)、解析/生成http请求/响应消息的库等有关的许多问题。有成熟和良好测试的解决方案。
正如您已经注意到的,HTTP几乎是一个restful协议,但并不完全是一个restful协议。而且,由于它的时代,它已经积累了许多功能,不总是坐好,或有替代的解决方案。这确实会导致混乱。这与安全并没有什么特别的关系,但事实上Web是一个开放的平台。许多提供者没有(而且仍然没有)提供对所有标准的充分支持,这导致许多“事实上”/“最低公分母”要素成为规范,并在以后的标准修正中记录下来。
至于良好的实践,借鉴标准的软件界面设计。它只是用HTTP请求/响应来表示。另外,研究提供Restful接口的其他产品,并研究它们是如何设计的。除非您有一个全新的应用程序,否则可能已经有了类似的产品。向他们学习。
在我看来,您少关注使用HTTP的事实,而更多地关注Restful。服务背后的业务逻辑不应该关心请求是否来自HTTP、电子邮件、桌面应用程序或其他I/O设备。
为此目的:
现在,获取HTTP指南并翻译要通过HTTP发送的Restful服务请求/响应。
如果请求需要参数,请查找提供所需结果的标头字段、参数、正文和查询字符串。这里没有正确的答案,它的所有上下文都是基于所期望的。例:
如果有些数据位于URL中,有些在查询字符串中,有些在正文中,则完全可以接受http请求。只要它清楚地记录了如何、何时和预期的行为。
重要的是,完成请求所需的所有信息都可以从HTTP请求中提取到一个数据结构中,以传递给您自己的业务逻辑,并且响应也可以类似地编码在HTTP响应中。这样,您的业务逻辑是分开的,并且是可测试的。
现在,记录映射并告诉您服务的客户端。他们将从他们的软件映射到这个界面,然后再回来。
https://softwareengineering.stackexchange.com/questions/381520
复制相似问题