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://domian/restapi/user.json

  • 访问方法: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接口设计的更多相关文章

  1. 数据仓储之DLL层接口设计

    一.接口设计 1.1. IBaseRepository.cs public interface IBaseRepository<T> { T Add(T entity); bool Upd ...

  2. RESTful接口设计原则/最佳实践(学习笔记)

    RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...

  3. Web API接口设计经验总结

    在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...

  4. Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)

    利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...

  5. 优秀的API接口设计原则及方法(转)

    一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...

  6. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  7. App接口设计

    关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/

  8. App接口设计原则-b

    1.记住密码不是真的让你记住密码,这里仅仅指的是一种自动登录的手段.不管在任何地方,明文存储的密码都是安全隐患,是必须尽量避免的.你可以采用某种方式对用户名.密码以及时间戳(重要)进行签名,再次登录时 ...

  9. 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例

    本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...

  10. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

随机推荐

  1. vue,一路走来(7)--响应路由参数的变化

    今天描述的问题估计会有很多人也遇到过. vue-router多个路由地址绑定一个组件造成created不执行 也就是文档描述的,如下图 我的解决方案: created () { console.log ...

  2. 8VC Venture Cup 2017 - Elimination Round - A

    题目链接:http://codeforces.com/contest/755/problem/A 题意:给定一个正整数N,问你是否存在一个数M使得N*M+1不是素数(M的范围在[1,1000]). 思 ...

  3. 【归纳】Layui table.render里的json后台传入

    在使用Layui的table元素时,传入的json的数据格式是有其自身定义的,需要另外添加一些字符,以正确传入. 为了传入符合前端格式的数据: table.render({ elem: '#test' ...

  4. 在linux终端中清空文件

    cat /dev/null > file_name vim file_name 把文件的前10行拷贝到新的文件中 head -n10 file_name1 > file_name2

  5. java基础复习(一)

    一.常用的DOS命令  打开命令提示符窗口的方式: ① win + R --> 输入cmd --> 回车 ② 开始 --> 搜索程序和文件的框中输入  cmd  --> 回车 ...

  6. vue项目放在IE上页面空白的问题

    Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码 1.npm install babel-polyfill --save 2.main.js中引入 import 'babel-poly ...

  7. 推荐Html Table和Markown互转的网站Table Convert Online

    网站名称:https://tableconvert.com/ 进入网站可以看到可以Table 转为Markdown.JSON.XML.SQL 多种格式 Table(4×5)定义Table的行数和列数: ...

  8. [原创] Delphi 修改新建窗体时候的默认字体格式

    Delphi 修改新建窗体时候的默认字体格式 操作步骤: 1.运行输入“regedit” 2.找到目录(这里默认以Delphi 7为例) HKEY_CURRENT_USER\Software\Borl ...

  9. service-web

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  10. JDK1.7 hashMap源码分析

    了解HashMap原理之前先了解一下几种数据结构: 1.数组:采用一段连续的内存空间来存储数据.对于指定下标的查找,时间复杂度为O(1),对于给定元素的查找,需要遍历整个数据,时间复杂度为O(n).但 ...