RESTAPI设计风格都有哪些
REST API设计风格都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
创新互联服务项目包括保定网站建设、保定网站制作、保定网页制作以及保定网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,保定网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到保定省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
如果你研究了应用程序中当前定义的所有路由,会注意到其中的几个符合我上面使用的API的定义。找到它们了吗?我说的是返回JSON的几条路由,比如第十四章中定义的/translate路由。这种路由的内容都以JSON格式编码,并在请求时使用POST方法。此请求的响应也是JSON格式,服务器仅返回所请求的信息,客户端负责将此信息呈现给用户。
虽然应用程序中的JSON路由具有API的“感觉”,但它们的设计初衷是为支持在浏览器中运行的Web应用程序。设想一下,如果智能手机APP想要使用这些路由,它将无法使用,因为这需要用户登录,而登录只能通过HTML表单进行。在本章中,我将展示如何构建不依赖于Web浏览器的API,并且不会假设连接到它们的客户端的类型。
分层系统
分层系统原则是说当客户端需要与服务器通信时,它可能最终连接到代理服务器而不是实际的服务器。因此,对于客户端来说,如果不直接连接到服务器,它发送请求的方式应该没有什么区别,事实上,它甚至可能不知道它是否连接到目标服务器。同样,这个原则规定服务器兼容直接接收来自代理服务器的请求,所以它绝不能假设连接的另一端一定是客户端。
这是REST的一个重要特性,因为能够添加中间节点的这个特性,允许应用程序架构师使用负载均衡器,缓存,代理服务器等来设计满足大量请求的大型复杂网络。
按需获取客户端代码(CodeOnDemand)
这是一项可选要求,规定服务器可以提供可执行代码以响应客户端,这样一来,就可以从服务器上获取客户端的新功能。因为这个原则需要服务器和客户端之间就客户端能够运行的可执行代码类型达成一致,所以这在API中很少使用。你可能会认为服务器可能会返回JavaScript代码以供Web浏览器客户端执行,但REST并非专门针对Web浏览器客户端而设计。例如,如果客户端是iOS或Android设备,执行JavaScript可能会带来一些复杂情况。
统一接口
最后,最重要的,最有争议的,最含糊不清的REST原则是统一接口。Dr.Fielding列举了REST统一接口的四个特性:唯一资源标识符,资源表示,自描述性消息和超媒体。
唯一资源标识符是通过为每个资源分配唯一的URL来实现的。例如,与给定用户关联的URL可以是/api/users/,其中是在数据库表主键中分配给用户的标识符。大多数API都能很好地实现这一点。
资源表示的使用意味着当服务器和客户端交换关于资源的信息时,他们必须使用商定的格式。对于大多数现代API,JSON格式用于构建资源表示。API可以选择支持多种资源表示格式,并且在这种情况下,HTTP协议中的内容协商选项是客户端和服务器确认格式的机制。
自描述性消息意味着在客户端和服务器之间交换的请求和响应必须包含对方需要的所有信息。作为一个典型的例子,HTTP请求方法用于指示客户端希望服务器执行的操作。GET请求表示客户想要检索资源信息,POST请求表示客户想要创建新资源,PUT或PATCH请求定义对现有资源的修改,DELETE表示删除资源的请求。目标资源被指定为请求的URL,并在HTTP头,URL的查询字符串部分或请求主体中提供附加信息。
超媒体需求是最具争议性的,而且很少有API实现,而那些实现它的API很少以满足REST纯粹主义者的方式进行。由于应用程序中的资源都是相互关联的,因此此要求会要求将这些关系包含在资源表示中,以便客户端可以通过遍历关系来发现新资源,这几乎与你在Web应用程序中通过点击从一个页面到另一个页面的链接来发现新页面的方式相同。理想情况下,客户端可以输入一个API,而不需要任何有关其中的资源的信息,就可以简单地通过超媒体链接来了解它们。但是,与HTML和XML不同,通常用于API中资源表示的JSON格式没有定义包含链接的标准方式,因此你不得不使用自定义结构,或者类似JSON-API,HAL,JSON-LD这样的试图解决这种差距的JSON扩展之一。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
当前文章:RESTAPI设计风格都有哪些
转载注明:http://scyanting.com/article/piochj.html