restful api php,RestfulAPI · ThinkPHP6.0接口开发与应用及uniapp快速入门(更新完毕) · 看云...

# Restful API

>[success]`Restful API`是目前`Web API` 设计中比较流行的一种设计风格。

## Restful API

>[info]RESTful是一种软件架构风格、设计风格,而**不是**标准,只是提供了一组设计原则和约束条件。

>[danger]对于这种风格,ThinkPHP框架和laravel框架都给了很好的支持。

### 一、常用的HTTP动词

>[success]这种风格对于熟悉ThinkPHP框架的应该都比较熟悉。

~~~

* GET:读取(Read)

* POST:新建(Create)

* PUT:更新(Update)

* PATCH:更新(Update),通常是部分更新

* DELETE:删除(Delete)

~~~

>[danger]大家可能会发现,通常情况下的网络请求主要是`POST`和`GET`。通常情况下客户端是不支持除`GET`和`POST`之外的请求方式的。这里的解决方案就是:客户端发出的 HTTP 请求,要加上`X-HTTP-Method-Override`属性,来指定请求方式。

~~~http

POST /api/Person/4 HTTP/1.1

X-HTTP-Method-Override: PUT

~~~

### 二、URI与URL

#### URI

>[info]URI,统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源

URI通常由三部分组成:

①访问资源的命名机制;

②存放资源的主机名;

③资源自身的名称。

#### URL

>[danger]URL是URI的一个子集。

URL的格式由三部分组成:

①第一部分是协议(或称为服务方式)。

②第二部分是存有该资源的主机IP地址(有时也包括端口号)

③第三部分是主机资源的具体地址,如目录和文件名等。

### 三、端点设计

>[success]端点是指用于访问API的URI

设计原则

1. 短小便于输入的URI

2. 人可以读懂的URI

3. 没有大小写混用的URI

4. 修改方便的URI

5. 不会暴漏服务器端架构的URI

6. 规则统一的URI

例:

|目的|端点|方法|

|-|-|-|

|获取用户信息列表|http://api.yifeng.com/v1/users|GET|

|新用户注册|http://api.yifeng.com/v1/users|POST|

|获取特定用户信息|http://api.yifeng.com/v1/users/:id|GET|

|更新用户信息|http://api.yifeng.com/v1/users/:id|PUT/PATCH|

|删除用户信息|http://api.yifeng.com/v1/users/:id|DELETE|

### 四、HTTP状态码

客户端的每一次请求,服务器都必须给出回应。回应包括 HTTP 状态码和数据两部分。当然,也可以根据需求再返回一个 业务状态码。具体的规范可以自行设定。

HTTP 状态码就是一个三位数,分成五个类别。

|状态码|含义|

|-|-|

|1字头|消息|

|2字头|成功|

|3字头|重定向|

|4字头|客户端原因引起的错误|

|5字头|服务器端原因引起的错误|

主要的状态码

|状态码|名称|含义|

|-|-|-|

|200|OK|请求成功|

|201|Created|请求成功,新资源建立|

|202|Accept|请求成功|

|204|No Content|请求成功,没有内容|

|300|Multiple Choices|存在多个资源|

|301|Moved Permanently|资源被永转移|

|302|Found|请求的资源被暂时转移|

|303|See Other|引用他处|

|400|Bad Request|请求不正确|

|401|Unauthorized|需要认证|

|403|Forbidden|禁止访问|

|404|Not Found|没有找到指定的资源|

|429|Too Many Requests|访问次数过多|

|500|Internal Server Error|服务器端发生错误|

|503||服务器暂时停止运营

>[danger]关于状态码这一块大家可以到百度上去了解一下。业务状态码是咱们自行定义的!

### 五、服务器回应

>[success]一般情况下,服务器不要回复纯文本的数据,通常情况下返回的是`XML`或`JSON`格式的数据。

>[danger] Web API其实就是网页的一种,其返回的数据形式更容易让计算机程序处理,而不是返回普通的HTML。所以返回的数据应该尽可能地设计得方便计算机程序处理。

>[info]在这里就使用JOSN作为返回的数据格式。

#### 数据格式返回的指定方法

1. 使用查询参数的方法

2. 使用扩展名的方法

3. 使用在请求首部指定媒体类型的方法

>[danger]如果您的接口不需要同时支持多种类型,也可以不需要进行执定。

>[danger]在返回数据时,在满足需求的情况下,返回的数据量越小越好。(可以让用户来决定返回的数据)

#### 返回数据的封装

>[info]关于响应返回的数据格式,建义封装成统一样的格式。

### 六、版本号

>[success]关于版本号的,有多种解决方案。在这里使用ThinkPHP自带的解决方案。

### 七、API接口文档

>[success]通常情况下,API接口的开发者和使用者是不同的人群,所以做一详细的接口文档是十分必要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 向服务器发放请求,PHP客户端向服务器端发送请求并向远程服务器发送服务器端请求...

我的方案如下:>单击按钮时,客户端将向服务器端发送请求>一旦服务器端收到请求,它将向远程服务器发送另一个请求以获得结果>一旦响应到来,服务器端应该回应客户端的响应.客户$.post(login_server.php{act:"post",phone:phone,passwords:passwords…

php检查在线用户,php – 检查用户是否在线laravel

我有列last_activity,其中写入日期最后一个活动用户使用中间件.我如何检查在线用户以及何时注销?中间件:class LastActivityUser{/*** Handle an incoming request.** param \Illuminate\Http\Request $request* param \Closure $next* return mixed*/pu…

java 写文件缓存,java泛型实现文件缓存

package joyport.hbase;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.HashMap;/*** 文件缓存读写** author xiepengjoyport.com*/public class…

java方法重载的意义,java方法重载

class ChongZai{public void a(int a);public void a(Strting a);public void a(int a,int b);}如上就是一个重载了 而重载要满足一下条件:1.必须是同一个类2.方法名(也可以叫函数)一样3.参数类型不一样或参数数量不一样重载的作用:还是以上面的例子ChongZai cz new…

php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦

PHP 7.3.7正式发布了。PHP(PHP:Hypertext Preprocessor)是一种在电脑上执行的脚本语言,主要是用途在于处理动态网页,也包含了命令列执行接口(command line interface),或者产生图形使用者接口(GUI)程式。版本主要还是修复 bug&…

matlab光学教程,基于MATLAB的物理光学仿真

摘要:利用MATLAB编程语言对典型物理光学实验进行了仿真模拟,制作了包括干涉、衍射、信息光学、晶体光学实验在内的光学实验仿真平台,可应用到光学理论和实验教学中,使整个抽象的物理过程变得直观形象,增强了学生的学习…

php jwt token刷新方案,laravel JWT自动刷新 自定义验证器

在前面的文章中,我们引入了JWT的验证方式,但是在前面并没有做过多的处理,只是用JWT生成了一个token,那么今天来就解决后续问题为了保证用户信息的安全, 我们的生成的JWT不可能一直有效,我们在配置文件里边配…

php orm 链式,关于php:雄辩的ORM中的交叉和分页

大家好,我有3张桌子:具有以下属性的名为content的表:idnametable_type_idrelease_datepopularity另一个名为content_genres的表,具有以下属性:content_idgenres_id另一个具有以下属性的表,称为genres&#…

2019java形势,2019Java开发还有哪些发展

相信已经有不少人在心里考虑着春节之后转行新工作了吧,而在众多行业中IT行业,特别是Java开发、Java程序员等岗位相信是很多人的首选。谁让现在程序员薪资这么高呢,但是现在互联网发展迅速,各类编程语言层出不穷,比如py…

php取消转译代码,PHP在我不需要的时候进行转义

我有一个问题,即PHP在我不希望它出现在代码中的地方进行转义:$url_ stripslashes(((substr(strtolower($url),0,7)!"http://")? "http://".$url:$url));$host $this->googleDomains[mt_rand(0,count($this->googleDomains)-1)];$target "/s…

matlab给plc发送命令,想学习下如何将PLC发送的指令让软件接收到?

PLC作为下位机,接收上位机的执行命令,并将执行结果反馈给上位机。工具/原料电脑、PLC、USB转RS232数据线和RS232转RS485模块(或者USB转RS485)方法/步骤PLC与电脑线路连接,根据电脑的串口情况,1.电脑自带RS232串口,那么…

mysql允许两个用户远程连接,配置MySQL服务允许用户远程连接

默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件。一、修改/etc/mysql/my.conf找到bind-address 127.0.0.1这一行改为bind-address 0.0.0.0即可二、为需要远程登录的用户赋予权限1、新建用户远程连接…

pupload 文件分块 php,基于Plupload实现Base64分割的文件上传方案

标题:基于Plupload实现Base64分割的文件上传方案关键词:文件上传、Base64、Plupload、Blob、分割上传领域:Web前端作者:孙振强日期:2018-04-13目录背景存在问题2.1. 体积增加1/32.2. 大文件上传不稳定方案思路3.1. 将服…

php imagick手册,PHP中使用Imagick实现各种图片效果实例

这篇文章主要介绍了PHP中使用Imagick实现各种图片效果实例,本文讲解了偏置图像、改变图片大imagick是一个功能强大的图像处理库。说是翻译 其实就是简要介绍imagick 的主要功能的或者说是我觉得比较实用的功能函数的介绍 以及使用的例子。因为本人的英语水平有限,所…

php流程控制的类型有哪些,流程控制包括哪些内容

流程控制也称为控制流程,是计算机运算领域的用语,其内容包括在程序运行时,个别的指令或是陈述、子程序运行或求值的顺序,不论是在声明式编程语言或是函数编程语言中,都有类似的概念。控制流程(也称为流程控制)是计算机…

PHP公鸡五文钱,公鸡

中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?实现过程&#…

oracle11g创建闪回分区多大,Oracle闪回区大小预估

一个朋友问如何设置Oracle闪回区大小,有什么依据没有。查证官方文档,有如下描述For example, if you intend to setDB_FLASHBACK_RETENTION_TARGET to 24 hours, and if the database generates 20 GB of redo in a day, then a rule of thumb is to all…

平方变换法提取载波MATLAB,毕业设计(论文)MPSK信号的载波同步算法研究与仿真.doc...

目录摘要IAbstractII第一章 绪论1相移键控技术1第二章 载波同步原理22.1平方变换法和平方环法22.2 同相正交3第三章 相移键控(PSK)信号的调制原理63.1 二进制相移键控的基本原理63.2 二进制差分相移键控(DPSK)的基本原理83.3 多进制相移键控(MPSK)的基本原理113.3.1 QPSK调制原…

oracle dba_waiters中的lockid是什么,查杀oracle lock session and table

查杀oracle 死锁的一些帖子摘录[more]查找死锁进程column sid format 999;column b format 9;column object_name format a30;select v$lock.sid,decode(v$lock.type,MR, Media Recovery,RT,Redo Thread,UN,User Name,TX, Transaction,TM, DML,UL, PL/SQL User Lock,DX, Distri…

查询linux服务器事物传输失败日志,查看fail2ban日志代替lastb查看登录失败记录

之前我曾经用shell脚本提取lastb登录失败超过指定次数的IP加入到iptables,来禁止这些IP登录主机,达到防止恶意攻击的目的。后来为了给主机提供更全面的防护,又安装了fail2ban。今天早上我收到fail2ban发过来的报警邮件提示我禁止了一个IP登录…