RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。降低开发的复杂性,提高系统的可伸缩性。
Restful API接口规范包括以下部分:
一、协议
API与用户的通信协议,使用HTTPs协议或者HTTP协议,统一确定用一种。
二、域名
应该尽量将API部署在专用域名之下,如https://api.XXXXXX.com;如果多个项目创建API,把项目名称带上 如https://greapi.XXXXXX.com。
三、版本
可以将版本号放在HTTP头信息中,也可以放入URL中,如https://api.XXXXXX.com/v1/,或者加入参数中
四、路径
路径是一种地址,在互联网上表现为网址,在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数,如https://api.XXXXXX.com/v1/students。
五、HTTP动词
对于资源的具体操作类型,由HTTP动词表示,HTTP动词主要有以下几种,括号中对应的是SQL命令。
1. GET(SELECT):从服务器取出资源(一项或多项);
2. POST(CREATE):在服务器新建一个资源;
3. PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源);
4. PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性);
5. DELETE(DELETE):从服务器删除资源;
6. HEAD:获取资源的元数据;
7. OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
使用方式
GET http://www.XXXXXX.com/api/user # 获取列表
POST http://www.XXXXXX.com/api/user # 创建用户
PUT http://www.XXXXXX.com/api/user/{id} # 修改用户信息
DELETE http://www.XXXXXX.com/api/user/{id} # 删除用户信息

六、过滤信息
如果记录数量很多,服务器不可能都将它们返回给用户,API会提供参数,过滤返回结果,用于补充规范一些通用字段,常见的参数有:
1. ?limit=20:指定返回记录的数量为20;
2. ?offset=8:指定返回记录的开始位置为8;
3. ?page=1&per_page=50:指定第1页,以及每页的记录数为50;
4. ?sortby=name&order=asc:指定返回结果按照name属性进行升序排序;
5. ?animal_type_id=2:指定筛选条件。
七、状态码
服务器会向用户返回状态码和提示信息,以下是常用的一些状态码,可以根据实际业务添加对应的状态码,需和http状态码对应:
1. 200 OK - [GET]:服务器成功返回用户请求的数据;
2. 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功;
3. 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务);
4. 204 NO CONTENT - [DELETE]:用户删除数据成功;
5. 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作;
6. 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误);
7. 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的;
8. 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作;
9. 406 Not Acceptable - [GET]:用户请求的格式不可得;
10. 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的;
11. 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误;
12. 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
八、错误处理
字段名称:message
示例
{"code": 200,"message": "啊哈哈","succ": true,"data": [] }
服务器返回的数据格式,应该尽量使用JSON,避免使用XML。

    <?php

    /**
* 数据操作类
*/
class Request{
//允许的请求方式
private static $method_type = array('get', 'post', 'put', 'patch', 'delete');
//测试数据
private static $test_class = array(
0 => array('code'=>0,"message"=>"参数错误","succ"=>false, "data"=>[]),
1 => array('code'=>200,"message"=>"啊哈哈","succ"=>true, "data"=>["name" => '托福班', 'count' => 18]),
2 => array('code'=>200,"message"=>"啊哈哈","succ"=>true, "data"=>["name" => '雅思班', 'count' => 20]),
); public static function getRequest()
{
//请求方式
$method = strtolower($_SERVER['REQUEST_METHOD']);
if (in_array($method, self::$method_type)) {
//调用请求方式对应的方法
$data_name = $method . 'Data';
return self::$data_name($_REQUEST);
}
return self::$test_class[0];
} //GET 获取信息
private static function getData($request_data)
{
$class_id = (int)$request_data['class'];
//GET /class/ID:获取某个指定班的信息
if ($class_id > 0) {
return self::$test_class[$class_id];
} else {//GET /class:列出所有班级
return self::$test_class;
}
}
}
?>

Restful API 的设计规范的更多相关文章

  1. Restful API的设计规范

    原文:https://blog.csdn.net/u013063153/article/details/72828164 本文总结了 RESTful API 设计相关的一些原则,只覆盖了常见的场景.有 ...

  2. Restful API 的设计规范(转)

    1. URI URI 表示资源,资源一般对应服务器端领域模型中的实体类.URI规范 不用大写; 用中杠-而不用下杠_; 参数列表要encode; URI中的名词表示资源集合,使用复数形式; 资源集合与 ...

  3. Restful API设计规范及实战

    Restful API的概念在此就不费口舌了,博友们网上查哈定义文章很多,直入正题吧: 首先抛出一个问题:判断id为 用户下,名称为 使命召唤14(COD14) 的产品是否存在(话说我还是很喜欢玩类似 ...

  4. Restful API设计规范及实战【说的比较清楚了】

    Restful API设计规范及实战   Restful API的概念在此就不费口舌了,博友们网上查哈定义文章很多,直入正题吧: 首先抛出一个问题:判断id为 用户下,名称为 使命召唤14(COD14 ...

  5. RESTful API设计的点

    RESTful API 前言 一直在使用RESTful API,但是好像概念还是很模糊的,总结下使用到的点 设计的规范 协议 API与用户的通信协议,总是使用HTTPs协议. 域名 应该尽量将API部 ...

  6. rest-framework 序列化格式Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  7. RESTful api 设计规范

    该仓库整理了目前比较流行的 RESTful api 设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github,欢迎大家补充!! Table of Contents RESTful A ...

  8. PHPer的项目RESTful API设计规范是怎样的?

    RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计. 什么是RESTful RESTful是一种软件设计风格, 主要用于客户端与服务端交互的软件. 一般来说RESTful ...

  9. 理解 RESTful API 设计规范

    RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计.从字面可以看出,他是Rest式的接口,所以我们先了解下什么是Rest. REST与技术无关,它代表的是一种软件架构风格,RES ...

随机推荐

  1. Tomcat&Servlet

    Tomcat&Servlet 一.web开发相关的概念 1. 软件架构 1.1 C/S架构 C:Client客户端, S:Server服务器 比如:QQ.微信.大型网游 优点: 显示效果炫 安 ...

  2. 从技术 Leader 的招聘需求看,如何转岗为当前紧缺的大数据相关人才?

    前段时间,跟候选人聊天的时候,一个有多年工作经验的资深 iOS 工程师告诉我,他最近正在学习 Machine Learning 相关的知识.他觉得,对于程序员来说,技术进步大大超过世人的想象,如果你不 ...

  3. 实现网上大神的asp.net mvc + ef +easyui

    大神开源博客: http://www.cnblogs.com/ymnets/p/3424309.html 系统更换UI:本人喜欢基于bootstrap的adminlteUI,所以后面会将UI更换为ad ...

  4. Retina显示屏-揭秘移动端的视觉稿通常会设计为传统PC的2倍

    一.Retina显示屏简介 retina:一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由1个变为多个,如在同样带下的屏幕上,苹果设备的retina显示屏中,像素点1个变为4个. reti ...

  5. Zoj 2314 Reactor Cooling(无源汇有上下界可行流)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题意:    给n个点,及m根pipe,每根pipe用来流躺液体的,单向 ...

  6. Just a Hook(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 In the game of DotA, Pudge’s meat hook is actual ...

  7. Murano中的角色

    Application Publisher - An individual or company that publishes an application to an application cat ...

  8. Spark Mllib里的如何对两组数据用斯皮尔曼计算相关系数

    不多说,直接上干货! import org.apache.spark.mllib.stat.Statistics 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mlli ...

  9. 物体检测丨浅析One stage detector「YOLOv1、v2、v3、SSD」

    引言 之前做object detection用到的都是two stage,one stage如YOLO.SSD很少接触,这里开一篇blog简单回顾该系列的发展.很抱歉,我本人只能是蜻蜓点水,很多细节也 ...

  10. 记一次序列化的JSON解析问题

    目录 一.问题初探 二.问题原因 三.解决问题 一.问题初探 我今天在使用Ribbon 远程调用的时候 消费者去消费服务端所提供的服务,在使用Post请求中的PostForEntity传递参数的时候, ...