设为首页 加入收藏

TOP

那些年,我们一起误解过的REST(二)
2019-09-17 17:47:54 】 浏览:71
Tags:那些 我们 一起 误解 REST
):表示资源创建成功。
  • 204(No content):表示资源为空。
  • 301(Moved Permanently):表示资源的URI已永久性更改,需要在响应内容中获取新的URI。
  • 302(Moved Temporarily):表示资源的URI已临时性更改,需要在响应内容中获取新的URI。
  • 400(Bad Request):表示请求有问题,如参数错误等。
  • 403(Forbidden):表示鉴权不通过,没有权限访问该资源。
  • 404(Not Found):表示资源不存在。
  • 405(Method Not Allowed):表示该资源不支持当前的请求方法。
  • 409(Conflict):表示当前请求的某前置条件不符合。
  • 500(Internal Server Error):通用内部错误。
  • 502(Bad Gateway):网关错误,从上游服务器收到无效响应。
  • 504(Gateway Timeout):网关超时,在预期时间内没有收到上游服务器的响应。
  • ……
  • 还有其他HTTP返回码,可以参考HTTP标准。

    只要使用了规范的REST架构风格,那么就可以根据HTTP的标准,做出明确的相应处理,无需另外制定私有协议了。既减少了私有协议的兼容性问题,又能作为标准适用于所有的RESTful架构。

    5) 返回内容

    REST API的返回内容应该是资源的表述。

    前面说过,同一个资源可以有多种不同格式的表述,如json格式和xml格式,所以返回内容应该是自描述的。也就是说,在HTTP响应的Header中,必须包含Content-type属性,如application/json、application/xml、text/html等。

    另外,REST是“可编程”的Web服务,也就是说,程序可以根据REST API的返回内容,进行下一步的操作。例如,查询author资源,下一步可能是要查询该作者著作的book资源。所以,如果author资源的表述中包含了该作者著作book资源的URI,则客户端可以进行相应的操作。又如,查询某个地图资源,地图资源的表述中如果包含了各方向的相邻地图资源,则当客户端的鼠标移到屏幕边缘时,就可以获取到该方向上的地图资源了;或者地图资源的表述中包含景点、餐馆等资源URI,则可以进行相应的操作。

    在表述中包含其他资源的URI实现了连通性。连通性可以作为客户端应用状态的状态引擎,引导客户端进行下一步的操作,带来了极大的便利。

    6) 其他

    统一接口还有其他方面的原则,本文就不细讲了,感兴趣的朋友可以阅读Fielding的论文。

    2. 无状态

    无状态约束条件是指两次请求之间不存在依赖关系,每一次请求都包含完整的状态信息。这里指的状态是指客户端与服务器之间通信交互的状态,与资源状态无关。

    举个有状态的例子,为了查工资,需要先登录系统(第一次请求),再输入查询密码(第二次请求)。如果前面两次请求都通过了,那么调用查询接口则可以查询到工资;否则调用查询接口则报未鉴权的错误。查询工资接口的返回结果与前面两次请求的状态是关联的,所以是有状态的服务。

    而无状态的服务,则直接调用查询工资接口,在请求中(一般在Header中)带有鉴权信息,若鉴权通过则可查询到工资,鉴权不通过则报错。该请求不依赖于任何前置请求,称为无状态。

    REST使用无状态约束条件,确保了请求的独立性和简单性,减少了很多跨请求的状态维护成本。当然,带来的代价是每次请求可能需要传输冗余的信息。

    3. 缓存

    缓存约束条件主要是用于改善网络的效率。缓存约束条件要求一个请求的响应中的数据被隐式地或显式地标记为可缓存的或不可缓存的。如果响应是可缓存的,那么客户端缓存就可以为以后的相同请求重用这个响应的数据,减少了网络交互,提高了效率、可伸缩性和用户感知的性能。

    4. 客户端-服务器

    这个约束条件主要是分离用户界面和数据存储,一方面改善用户界面跨平台的可移植性,另一方面简化服务器组件,改善系统的可伸缩性。

    5. 分层系统

    分层系统架构约束条件将架构分为若干层,划定每一层的边界,从而降低每一层设计的复杂度。同时,通过分层,可以抽象底层的异构性,给上层提供统一的接口,简化上层的逻辑。

    6. 按需代码

    按需代码约束条件是指某些场景下,客户端不清楚资源的处理方法,通过向服务器请求相应的处理代码来执行。这样可以简化客户端开发,允许部署后下载功能代码来改善系统的可扩展性。但是,因为传输的是代买,降低了可见性,所以是REST的一个可选的架构约束条件。

    问答
    Java中的REST
    相关阅读
    体验Django REST framework,解读REST架构风格
    我是怎么一步步用go找出压测性能瓶颈
    当 MySQL 连接池遇上事务(一):神秘的幽灵锁
    【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

    此文已由作者授权腾讯云+社区发布,更多原文请点击

    搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

    海量技术实践经验,尽在云加社区

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇一点一点看JDK源码(〇) 下一篇cas单点登录

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目