Restful API 最佳实践 (理论篇)
参考: http://www.ibm.com/developerworks/cn/web/1103_chenyan_restapi/
规划好 资源标示结构 和 URI模式, 是API设计成功的关键
原创文章,转载请注明:http://www.cnblogs.com/ganiks/
- 规划资源标识结构和URI模式
- 规划基本资源类型
- 针对一个文档的评论, URI 模式可以设计成如下:/ 文件夹 / [ 文件夹名 ] / 文件 / [ 文件名 ] / 评论 / [ 评论唯一标示 ]
- 规划集合资源类型
- 使用过滤条件
- / 环境工程系 / 学生 ? 籍贯 = 北京 & 性别 = 女
- 使用排序
- ?sortOrder=asc&sortField=age
- 使用分页
- / 所有学生 ?page=5&pagesize=50
- 使用过滤条件
- 一些特殊资源类型
- 如果我们来定义一个新的集合 ----“我检出的文档”,用创建一个集合资源来对应检出(创建一个文档锁),用删除一个集合资源来对应检入(删除一个文档锁)
- 在 REST 这个以名词为核心的构架结构中,当你遇到一些动词特性比较强的操作,而又很难用原始资源的增删改查来匹配的时候,不妨换个思路, 通过引入新的逻辑资源集合的方式, 来进行 API 的设计与规划。
- 规划基本资源类型
- 理解和使用内容协商
- 使用URL参数进行内容协商
- http://restapi/news/26?format=xml
- 使用 URL 参数,简单灵活,但是也由此带来了设计上的随意和不标准;过多的参数会导致 URL 的可读性变差,更有甚者,可能会导致 URL 过长,超出规范,API 请求无法执行
- 使用Accept头进行内容协商
- Accept:application/json,text/html
- Accept-Charset:utf-8
- Accept-Encoding:gzip,deflate,sdcn
- Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
- 使用URI模式进行内容协商
- 使用URL参数进行内容协商
- 正确的使用HTTP响应代码
- 200 OK
- 201 Created
- 202 Accepted
- 204 No Content
- 301 Moved Permanently
- 302 Found
- 304 Not Modified
- 305
- 400 Bad Request
- 401 UnAuthorized
- 403 Forbidden
- 404 Not Found
- 405 Method Not Allowed
- 500 Internal Server Error
- 501
- 502 Bad GateWay
- 504 GateWay Timeout
- 505
- 使用HTTP头处理缓存
- 缓存控制
- Cache-control
- private
- no-cache
- max-age=600
- must-revalidate
- Expires
- Cache-control
- 条件请求与电子标签
- 很多时候,内容可能几个小时甚至几天都不会发生变动
- HTTP头中返回内容的最后修改时间
Last-Modified - 根据服务器内容生成电子标签
ETag - 下次请求的时候会使用
If-Modified-Since或者If-None-Match头信息把上次请求到的时间戳或者Etag传给服务器,服务器端进行判断后:- 返回给用户最新的内容
- 返回
HTTP304,内容没有变化
- 缓存控制
- 使用HTTP头处理并发
- 条件请求
- 在发出修改请求的同时,在HTTP头中使用
If-Not-Modified-Since或者If-Match头信息,把获取数据时得到的时间戳或者电子标签传给服务器 - 服务器通过这个与当前内容比较,可知修改请求是否是针对当前内容提出的。
- 是,则修改
- 不是,返回
HTTP412(未满足前提条件) 
- 在发出修改请求的同时,在HTTP头中使用
- 条件请求
- 更好的使用数据冗余和链接元素
- 为了保证 API 的灵活与效率,我们可以提供一个开关参数,如 includeAircraftDetail=true
- 我们要展示一个文件夹下面所有的文件,并允许用户察看每个文件都允许哪些人编辑,哪些人下载以及将某文件放入收藏夹。这时候,我们可以考虑将这些可以执行的操作的 API 都用链接元素的方式返回给客户端,这样,开发者无需自己拼接 API 调用的 URL,就可以使用,从而降低代码复杂度。
Restful API 最佳实践 (理论篇)的更多相关文章
- 我所理解的Restful API最佳实践
一直在公司负责API数据接口的开发,期间也遇到了不小的坑,本篇博客算是做一个小小的记录. 1. 不要纠结于无意义的规范 在开始本文之前,我想先说这么一句:RESTful 真的很好,但它只是一种软 ...
- 我所认为的RESTful API最佳实践
我所认为的RESTful API最佳实践 不要纠结于无意义的规范 在开始本文之前,我想先说这么一句:RESTful 真的很好,但它只是一种软件架构风格,过度纠结如何遵守规范只是徒增烦恼,也违背了使用它 ...
- REST与RESTFul API最佳实践
我经常会面试一些做PHP的开发者,让我很奇怪的是,10个人总有8个多不知道什么是REST服务,甚至是没有听说过.但RESTFul API已经是现在互联网里对外开放接口的主流模式,可参考: 豆瓣API ...
- Restful Api 最佳实践
Web APIs has become an very important topic in the last year. We at M-Way Solutions are working ever ...
- RESTFul API最佳实践
RESTful API最佳实践 RESTful API 概述 基本概念 REST 英文全称:Representational State Transfer,直译为:表现层状态转移.首次是由Roy Th ...
- RESTful API 最佳实践(转)
原文:http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html 阮一峰老师的文章,他的文章把难懂的东西讲的易懂 RE ...
- RESTful API 最佳实践----转载阮一峰
文章地址http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
- 我们必须要知道的RESTful服务最佳实践
看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标 ...
- ASP.NET Core Web API 最佳实践指南
原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介绍 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但是,你难 ...
随机推荐
- 在PeopleSoft系统中实现打印页面的功能
我们知道,在PeopleSoft HCM里,一般上了薪酬模块的话,都会客户化工资单页面,去匹配公司之前的工资单的报表的格式.有的时候,这个工资单页面又需要打印出来,以供员工的使用.PeopleSoft ...
- Git一张图学习
- php 判断table 是否存在 根据返回值继续下一步的操作
根据sql命令创建数据库或者数据表时候,判断库或者表是否存在比较重要. //要创建的表是否已经存在 function isHaveTable( $dbName,$tableN, $con) //数据 ...
- Adapter的getView方法详解
来自:http://blog.csdn.net/yelbosh/article/details/7831812 BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是 ...
- Laravel 5 基础(八)- 模型、控制器、视图基础流程
添加路由 Route::get('artiles', 'ArticlesController@index'); 创建控制器 php artisan make:controller ArticlesCo ...
- linux安装至少有哪两个分区,各自作用是什么?
1.至少有/代表根分区,/swap代表的意思是交换分区. 2.swap相当于缓存的作用:
- 使用checked关键字处理“溢出”错误
在进行算术运算时,可以使用checked关键字有效处理溢出错误,使用checked关键字可能对程序的性能会有一点点的影响,这是一种以牺牲性能换取健康的做法. private void button1_ ...
- 九度oj 1184 二叉树遍历
原题链接:http://ac.jobdu.com/problem.php?pid=1184 简单的二叉树重建,遍历. 如下: #include<cstdio> #include<cs ...
- android开发系列之代码整洁之道
说起代码整洁之道,想必大家想到更多的是那本经典重构书籍.没错,记得当时自己读那本书的时候,一边结合项目实战,一边结合书中的讲解,确实学到了很多东西,对我自己的编码风格影响极深.随着时间的流逝,书中很多 ...
- 管理员必备的20个Linux系统监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...