REST接口设计
REST接口设计
##为什么要有REST
在传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发“在互联网环境中使用的软件”。RESTful架构,就是目前最流行的一种互联网软件架构。
Web,iOS,Android 作为同等公民调用服务器提供的 API,各自有着各自实现方式。如图

REST的解释
Representational State Transfer (资源表现层状态转化)
资源(Resources)
网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务。你可以用一个URI指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
"上网",就是与互联网上一系列的"资源"互动,调用它的URI。
表现层(Representation)
"资源"具体呈现出来的形式
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。
状态转换(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
因此,如果客户端通过"某种手段"操作服务器,服务器端就会发生"状态转化",而这种转化是建立在表现层之上的。具体实例中的"某种手段",就是HTTP协议(里面四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
总结一下RESTful架构:
一个URI代表一种资源;
客户端和服务器之间,传递的是这种资源的某种表现层;
客户端通过“某种手段”,对服务器端资源进行操作,实现"状态转化"。
这是一组架构约束条件和原则,不是一种标准,不这么做你也可以完成任务,只不过你的接口得不到应有的好处。
举个例子
####获取用户信息
访问地址:
http://domian/restapi/user.json?id=1
http://domian/restapi/user/1.json
http://domian/restapi/user.json?name=foo&addr=bar
访问方法:HTTP GET
返回格式:
{
"id": 1,
"name": "Jack",
"addr": "block"
}
增加用户信息
访问方法:HTTP POST
发送数据:
{
"name": "Jack1",
"addr": "block1"
}
返回格式:
{
"id": 2,
"name": "Jack1",
"addr":"block1"
}
修改用户信息
访问地址:
http://domian/restapi/user.json?id=1
http://domian/restapi/user/1.json
http://domian/restapi/user.json?name=foo&addr=bar
访问方法:HTTP PUT
发送数据:
{
"id": 2,
"addr":"bar2"
}
返回格式:
{
"id": 2,
"name": "Jack1",
"addr":"bar2"
}
删除用户信息
访问地址:
http://domian/restapi/user.json?id=1
http://domian/restapi/user/1.json
http://domian/restapi/user.json?name=foo&addr=bar
访问方法:HTTP DELETE
返回格式:
{
"detail": "....."
}
REST接口设计的更多相关文章
- 数据仓储之DLL层接口设计
一.接口设计 1.1. IBaseRepository.cs public interface IBaseRepository<T> { T Add(T entity); bool Upd ...
- RESTful接口设计原则/最佳实践(学习笔记)
RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...
- Web API接口设计经验总结
在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...
- Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)
利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...
- 优秀的API接口设计原则及方法(转)
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- App接口设计
关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/
- App接口设计原则-b
1.记住密码不是真的让你记住密码,这里仅仅指的是一种自动登录的手段.不管在任何地方,明文存储的密码都是安全隐患,是必须尽量避免的.你可以采用某种方式对用户名.密码以及时间戳(重要)进行签名,再次登录时 ...
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
随机推荐
- mysql的一些基本常识
1.主键的选取 主键的字段不能有null存在 主键应该使用bigint自增,而不是int 主键的选取默认为id 联合主键:就是多个字段被设置为主键,这里主键字段的值是允许相同的,只要不是所有字段相同即 ...
- 通过URL方式动态修改logback level级别
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; import ...
- Go 数组(1)
1.一旦声明,数组里存储的数据类型和数组长度就都不能改变了.如果需要存储更多的元素, 就需要先创建一个更长的数组,再把原来数组里的值复制到新数组里. 例如: ]int 2.使用数组字面量声明数组 // ...
- Java字节数组流学习
字节数组流 基于内存操作,内部维护着一个字节数组,我们可以利用流的读取机制来处理字符串.无需关闭,不会报IOException. ByteArrayInputStream 包含一个内部缓冲区,该缓冲区 ...
- docker-compose.yml rabbitmq
version: '3.1'services: mq: image: 'rabbitmq:management' restart: always ports: - '5672:5672' - '156 ...
- shiro 安全框架 详解
---恢复内容开始--- Shiro 简介 简介• Apache Shiro 是 Java 的一个安全(权限)框架.• Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境, ...
- 解决 linux 下安装 node 报: command not found
注意:有时安装成功后,需要关闭xshell,重新启动.nvm才会生效. 1. 在 linux 下安装 node 提示 -bash: node: command not found. 2. 这种情况可 ...
- 【leetcode】1022. Sum of Root To Leaf Binary Numbers
题目如下: Given a binary tree, each node has value 0 or 1. Each root-to-leaf path represents a binary n ...
- spring-boot整合mybaits多数据源动态切换案例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...
- [CF1161F]Zigzag Game
通过这道模板题学了一种新的模型,记录一下. 稳定婚姻匹配 至于这道题,显然是一个二分图博弈的模型.考虑选择Bob,我们要找一组匹配使得任何情况下Bob都有匹配边能走.不失一般性假设Alice选择了in ...