web接口的定义说明:
请求方式:GET、POST、PUT、DELETE
请求路径:/login/?username=
请求参数: username
返回结果:{‘message’:‘ok’}.json
应该尽量将API部署在专用域名之下。
https://api.example.com
如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
应该将API的版本号放入URL。
http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo
http://www.example.com/app/2.0/foo
另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。
因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URL。版本号可以在HTTP请求头信息的Accept字段中进行区分(参见Versioning REST Services):
Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=2.0
路径又称"终点"(endpoint),表示API的具体网址,每个网址代表一种资源(resource)
(1) 资源作为网址,只能有名词,不能有动词,而且所用的名词往往与数据库的表名对应。
举例来说,以下是不好的例子:
/getProducts
/listOrders
/retreiveClientByOrder?orderId=1
对于一个简洁结构,你应该始终用名词。 此外,利用的HTTP方法可以分离网址中的资源名称的操作。
GET /products :将返回所有产品清单
POST /products :将产品新建到集合
GET /products/4 :将获取产品 4
PATCH(或)PUT /products/4 :将更新产品 4
(2) API中的名词应该使用复数。无论子资源或者所有资源。
举例来说,获取产品的API可以这样定义
获取单个产品:http://127.0.0.1:8080/AppName/rest/products/1
获取所有产品: http://127.0.0.1:8080/AppName/rest/products
对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词有下面四个(括号里是对应的SQL命令)。
还有三个不常用的HTTP动词。
下面是一些例子。
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园(上传文件)
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
下面是一些常见的参数。
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件
参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoos/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。
- 200 OK - [GET]:服务器成功返回用户请求的数据
- 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"
}
针对不同操作,服务器向用户返回的结果应该符合以下规范。
获取单一图书接口
请求方式:GET
请求路径:/books/1/
请求参数: id
返回结果:{‘bitivle’:西游记} json
1.2 Struts2 基础 1.2.1Struts1时代 随着时间的推移,Servlet+JSP+JavaBean模型暴露出了它的缺点: 流程凌乱:Servlet在完...
智能家居 物联网 声纹开锁啥话不说,先上效果图: 前几天给客户做一个物联网的项目,完事后,自己觉得挺好玩,也花100多块钱买了一个8路的继电器模块,买了一个小锁头,我的初衷是要通过手机蓝牙信号控制锁头开关,继而打开房门,而手机蓝牙信号我想通过科大讯飞提供的语音api声纹识别来进行发送,综上所述,我就是要通过语音识别进自己的家门,而别人再怎么说都不会进得去。说干就干,问某宝的继
FPGA的DDS信号发生器的波形ROM简单调用。
AAA: Authentication, authorization, accounting 认证、授权、记录AAA是认证、授权和记录的三个英文字的缩写。其主要目的是管理哪些用户可以访问网络服务器,哪些服务可供具有访问权限的用户使用,以及如何考虑使用网络资源的用户。Access Control 访问控制访问控制是按用户身份及其所归属的某项定义组来限制用户对某些信息项的访问,或限制对某些控制功能的使用的一种技术。访问控制通常用于系统管理员控制用户对服务器、目录、文件等网络资源的访问。A...
文章来自 1. http://blog.csdn.net/hechongyang123/article/details/8501529 2. http://blog.sina.com.cn/s/blog_6163bdeb0102dwfw.html在传统的信号处理中,人们分析和处理信号的最常用也是最直接的方法是傅里叶变换。傅里叶变换及其反变换构建起信号时域与频域
原文参考:https://www.v2ex.com/t/446587#reply4这个记录下 mysql 语句 导致服务器卡死 ,连接数增多,服务器直接宕机,快速解决办法,避免影响线上生成机器:1,先杀mysql进程2:杀php-fpm 进程 :sudo lsof -i -P -n | awk '/php-fpm/ || NR==1' (因为此时MySQL锁表,其他进程直接
结构体概述:问题定义:有时候需要将不同类型的数据组合成一个有机的整体,以方便引用。结构体变量的定义,引用;先声明结构体类型在定义变量 struct student student1,student2; 定义了student1和student2为struct student类型的变量,即它们具有struct student类型的变 量,即它们具有struct student类型的结构。结构体变量的引用应遵守以下规则1、不能将一个结构体变量作为一个
利用quartus II自带的仿真工具进行简单的波形仿真按照常规程序点击Run Functional Simulation后出现错误,猜测可能是未选择正确的仿真工具,因为这里可能默认的仿真工具是modelsim,而不是内置的仿真工具以下方式参考百度经验1、直接关掉窗口;重新打开工程文件夹,发现多出了simulation子文件夹,下面还有子文件夹qism2、回到工程串口,点击tool 下的launch simulation library compiler,按照下图进行配置,配置完成后
Vue3中事件总线模式已经被移除,官方建议使用外部库,例如mitt。首先main.ts挂载全局。
Python标准库 内置函数issubclass class classinfo
这篇文章给大家介绍的内容是关于PHP表单验证的例子,有需要的朋友可以参考一下。.error {color: #FF0000;}// 定义变量并设置为空值$nameErr = $emailErr = $genderErr = $websiteErr = "";$name = $email = $gender = $comment = $website = "";if ($_SERVER["REQUE...
1. 安装概述因为是离线安装,必须要安装编译工具(gcc,g++)下面有软件连接,不然安装报以下错误 configure: error: no acceptable C compiler found in $PATH 问题解决https://pan.baidu.com/s/1D7Z7uBVyzzui88LzyJ7WnA提取码:aurx①. 环境需求名称版本下载地址gccgcc上面连接????g++g++上面连接????postgispostgis