内容简介:REST,即 REpresentational State Transfer,其主语是 Resource,但是被省略掉了,所以全称是:Resource Representational State Transfer。按照字面意思来理解就是:资源在网络中以某种表现形式进行状态转移,这样的直译,我相信绝大多数看了都是困惑的,用人人都能理解的话来说,就是REST 是一种设计风格(不是标准),是一组架构的约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。其次,REST 是面向资源的,而资源
REST,即 REpresentational State Transfer,其主语是 Resource,但是被省略掉了,所以全称是:Resource Representational State Transfer。按照字面意思来理解就是:资源在网络中以某种表现形式进行状态转移,这样的直译,我相信绝大多数看了都是困惑的,用人人都能理解的话来说,就是 用 URL 来定位资源,用 HTTP 来描述操作 ,详细展开就是:
- 看 URL 就知道要什么
- 看 HTTP method 就知道干什么
- 看 HTTP status code 就知道结果如何
REST 是一种设计风格(不是标准),是一组架构的约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful。其次,REST 是面向资源的,而资源是通过 URL 进行暴露的。理解这两点对认识 REST 和 RESTful 非常重要。
那我们的 API 应该如何设计,才能满足 RESTful API 的要求呢?
HTTP 动词
对资源的具体操作类型,应该由 HTTP 动词表示,具体如下(括号里是对应的 SQL 命令):
- GET(SELECT):从服务器取出资源(一项或多项)
- POST(CREATE):在服务器新建一个资源
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)
- DELETE(DELETE):从服务器删除资源
还有两个不常用的 HTTP 动词:
- HEAD:获取资源的元数据
- OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的
过滤数据
如果查询出的数据很多,API 应该提供参数,将数据的过滤结果进行返回,常见的过滤参数如下:
- ?limit=10:指定返回记录的数量
- ?offset=10:指定返回记录的开始位置。
- ?page=2&per_page=100:指定第几页,以及每页的记录数。
- ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及 排序 顺序。
- ?animal_type_id=1:指定筛选条件
参数的设计是允许存在冗余的。
状态码
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词):
- 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
- 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
- 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
- 204 NO CONTENT - [DELETE]:用户删除数据成功。
- 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
- 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
- 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
- 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
- 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
- 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
- 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
- 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
错误处理
如果状态码是 4xx,就应该向用户返回出错信息。一般来说,返回的信息中将 error 作为键名,出错信息作为键值即可:
{ error: "Invalid API key" } 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 你了解HTTPS,但你可能不了解X.509
- 你真的了解Mybatis的${}和#{}吗?是否了解应用场景?
- 你所了解的 array_diff_uassoc 真的是你了解的那样吗?
- 图文了解 Kubernetes
- 深入了解 JSONP
- 一文了解 Kubernetes
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C# 6.0本质论
[美] Mark Michaelis(马克·米凯利斯)、[美] Eric Lippert(埃里克·利珀特) / 周靖、庞燕 / 人民邮电出版社 / 2017-2-1 / 108
这是C#领域中一部广受好评的名作,作者用一种易于理解的方式详细介绍了C#语言的各个方面。全书共有21章和4个附录(其中哟2个附录从网上下载),介绍了C#语言的数据类型、操作符、方法、类、接口、异常处理等基本概念,深入讨论了泛型、迭代器、反射、线程和互操作性等高级主题,还介绍了LINQ技术,以及与其相关的扩展方法、分部方法、Lambda表达式、标准查询操作符和查询表达式等内容。每章开头的“思维导图”......一起来看看 《C# 6.0本质论》 这本书的介绍吧!