restful API

出现原因

    前后端分离之后,后端负责数据编造,前端负责数据渲染,前端通过调用指定API获取统一格式的静态数据,之内的API的设计就成为了一个问题,
    restful API就是其中一种便于理解,易于使用的一种api约束。

设计原则

1 客户端-服务器:通过将用户UI与数据存储分开,我们可以简化服务器组件来提高跨多个平台的用户界面的可移植性并提高可伸缩性。 它可以比表>现成前后端分离的思想。
2 无状态:从客户端到服务器的每个请求都必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。 这表示你应该尽可能的避免使用session,由客户端自己标识会话状态。(token)
3 规范接口:REST接口约束定义:资源识别; 请求动作; 响应信息; 它表示通过uri标出你要操作的资源,通过请求动作(http method)标识要执行的操作,通过返回的状态码来表示这次请求的执行结果。
4 可缓存: 缓存约束要求将对请求的响应中的数据隐式或显式标记为可缓存或不可缓存。如果响应是可缓存的,则客户端缓存有权重用该响应数据以用于以后的等效请求。 它表示get请求响应头中应该表示有是否可缓存的头(Cache-Control)
其中1,2,3约束最为重要,其中1容易理解。接下来我们就谈谈无状态和规范接口的原则。
链接:https://www.jianshu.com/p/a35bad7dbc54

URI规范 (统一资源定位符,URL:统一资源标识符)

uri是具体的资源,而url是具体的资源的地址,url是属于uri的一部分
资源描述构成了URI,其约束一般如下

  1. 使用名词。如user,student
    http://api.example.com/class-management/students
    http://api.example.com/user-management/users/
    http://api.example.com/user-management/users/{id}
  2. http method对应不同的请求动作(数据库或业务)
  • GET---查询操作
    HTTP GET /devices?startIndex=0&size=20
    HTTP GET /configurations?startIndex=0&size=20 (url传参可用?连接,多个参数用&连接)
  • POST---新增操作
    HTTP POST /device
  • PUT---更新操作
    HTTP PUT /devices/{id}
  • PATCH---部分更新,由于浏览器兼容性问题,更推荐put
    HTTP PATCH /devices/{id}
  • DELETE---删除操作
  1. 使用连字符(-)而不是(_)来提高URI的可读性
    http://api.example.com/inventory-management/managed-entities/{id}/install-script-location //更易读
  2. 在URI中使用小写字母
    http://api.example.org/my-folder/my-doc
  3. 不推荐使用文件扩展名
    http://api.example.com/device-management/managed-devices.xml (错误写法)
    http://api.example.com/device-management/managed-devices (正确写法)
  4. 使用查询组件过滤URI集合
    很多时候需要对数据进行排序,搜索和过滤的操作,建议的写法是将输入参数作为查询参数,为不是创建新的API
    <meta charset="utf-8">

http://api.example.com/device-management/managed-devices?region=USA
http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ

  1. 不要在末尾使用/
    作为URI路径中的最后一个字符,正斜杠(/)不会添加语义值,并可能导致混淆。最好完全放弃它们。
  2. 使用http状态码定义api执行结果
    1xx:信息
    通信传输协议级信息。
    2xx:成功
    表示客户端的请求已成功接受
    3xx:重定向
    表示客户端必须执行一些其他操作才能完成其请求。
    4xx:客户端错误
    此类错误状态代码指向客户端。
    5xx:服务器错误
    服务器负责这些错误状态代码。
    如前端调用接口经常用到的400,是客户端的错误,一般是传参不对或者格式有问题
    500 就是服务器错误,无法完成请求
  3. api版本定义
    已经有投入使用的api,此时api更新升级,此时可以使用下面的方法

无状态

  1. 无状态通过将api部署到多个服务器中,有助于扩展到数百万并发用户。(集群)
  2. 无状态使得REST API不那么复杂 - 可以删除所有服务器端状态同步逻辑。(删除session,清理多余空间)
  3. 无状态API也很容易缓存。特定软件可以通过查看该一个请求来决定是否缓存HTTP请求的结果。(易缓存)
  4. 客户端会在每个请求中发送所有必要的信息,如服务器存贮的token等。(携带token)

部分信息转载至https://www.jianshu.com/p/a35bad7dbc54

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343