RESTful入门

1. REST简介

和RPC一样,都是目前比较主流的URL链接风格,也可以说是web服务的一种架构风格。REST全称Representational State Transfer,表现层状态转移。用一句话简单的概括就是URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。其实它真正的全称是Resource Representational State Transfer,看字面意思就是资源在网络中以某种表现形式进行状态转移。我们分开来解读:

  • Resources:资源,即数据,比如friends,books等;
  • Representational :某种表现形式,比如用json,xml,jpg等;
  • State Transfer:状态变化,通过HTTP动词实现。

符合rest类型的结构就是Restful。

举个简单的例子:

非REST的url:http://...../queryItems.action?id=001&type=T01
REST的url风格:http://..../items/001

再比如:

http://api.qc.com/v1/newsfeed: 某人的新鲜事;
http://api.qc.com/v1/friends: 某人的好友列表;
http://api.qc.com/v1/profile: 某人的详细信息;
然后用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转:
GET http://api.qc.com/v1/friends: 获取某人的全部好友列表;
GET http://api.qc.com/v1/friends/{id}: 获取某人的指定好友;
POST http://api.qc.com/v1/friends: 添加好友;
DELETE http://api.qc.com/v1/friends/{id}: 根据id删除好友;
PUT http://api.qc.com/v1/friends/{id}: 根据id更新好友;
禁止使用类似这样的URL:http://api.qc.com/v1/deleteFriend

2. 为什么用Restful

为了通过统一的接口为web,Android,IOS提供服务,对于微博开放平台,微信公共平台等,他们不需要有显式的前端,只需要一套提供服务的接口,也是Restful是它们最好的选择。

3. 如何设计

3.1 URL使用名词而不是动词,且推荐用复数

在restful架构中,每个URL代表一种资源,所以网址中不能有动词,只能有名词。

反例:

/getBooks
/addBook
/updateBook
/deleteBook?id=10

正例:

GET /books
POST /books
PUT /books/{id}
DELETE /books/{id}

3.2 保证head和get方法是安全的

head和get方法不会对资源的状态有所改变(污染),比如严格杜绝如下情况:

GET /deleteBook?id=10

GET、HEAD和OPTIONS均被认为是安全的方法,而PUT、POST、DELETE等请求都是不安全的(会修改数据 )。

3.3 资源的地址推荐用嵌套结构

比如:

GET /books/1003/catalog

3.4 使用正确的HTTP Status Code表示访问状态

HTTP状态可以参考:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。

3.5 使用HTTPS协议

API与用户的通信协议总是使用HTTPS协议。

3.6 专有域名

应该尽量将API部署在专用域名之下。

 https://api.example.com

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

https://example.org/api/

参考:

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

http://www.ruanyifeng.com/blog/2011/09/restful.html

https://blog.csdn.net/chenxiaochan/article/details/73716617

https://www.zhihu.com/question/28557115?utm_source=wechat_search&utm_medium=organic

RESTful入门的更多相关文章

  1. SpringMVC框架04——RESTful入门

    1.RESTful的基本概念 REST(Representational State Transfer)表述性状态转移,REST并不是一种创新技术,它指的是一组架构约束条件和原则,符合REST的约束条 ...

  2. axis2实践(二)Restful入门示例

    1. 实例说明 本示例直接参照了RESTful Web Services with Apache Axis2,本示例基本就是沿用的原示例,就是一个对学生信息(包括姓名,年龄,课程)的管理的例子,提供如 ...

  3. SprimgMVC学习笔记(九)—— RESTful支持

    一.什么是restful? Restful就是一个资源定位及资源操作的风格,其核心是面向资源.不是标准也不是协议,只是一种风格.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制.RES ...

  4. 补习系列(5)-springboot- restful应用

    一.目标 了解 Restful 是什么,基本概念及风格: 能使用SpringBoot 实现一套基础的 Restful 风格接口: 利用Swagger 生成清晰的接口文档. 二.Restful 入门 什 ...

  5. Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发

    一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...

  6. 一篇文章带你掌握主流服务层框架——SpringMVC

    一篇文章带你掌握主流服务层框架--SpringMVC 在之前的文章中我们已经学习了Spring的基本内容,SpringMVC隶属于Spring的一部分内容 但由于SpringMVC完全针对于服务层使用 ...

  7. SpringMVC&Maven进阶

    3. SpringMVC 3.1 了解SpringMVC 概述 SpringMVC技术与Servlet技术功能等同,均属于web层开发技术 学习路线 请求与响应 REST分割 SSM整合 拦截器 目标 ...

  8. Yii2框架RESTful API教程(一) - 快速入门

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  9. WCF4.0 –- RESTful WCF Services (1) (入门)

    WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求,无需去实现复 ...

随机推荐

  1. 关于下载gitbash客户端

    gitbash的安装包找不到了,最近又在准备新机器的环境,需要安装git客户端. https://www.git-scm.com/,网址找到了,但是下载非常缓慢.搜了一下,都是改host,但是改了也没 ...

  2. Oracle死锁处理实例

    Oracle死锁常规语句 1.查询Oracle死锁常规语句 SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l ...

  3. Android笔记(二十三) Android中的ProgressBar(进度条)

    圆形进度条和水平进度条 进度条也是UI界面一种非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比,进度条可以动态的显示进度,避免长时间的执行某个耗时操作时,让用户感觉程序失去了相应,从而更好的 ...

  4. 【DRF框架】序列化组件

    DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 #  使用Js ...

  5. 每日一题-——LeetCode(121)买卖股票的最佳时机

    题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润.注意你不能在买入股票前卖出股票 ...

  6. tcp的三次握手和四次挥手(二)

    一.三次握手 三次握手概念 当面试官问你为什么需要有三次握手.三次握手的作用.讲讲三次握手的时候,我想很多人会这样回答. 首先很多人会先讲下握手的过程: 第一次握手:客户端给服务器发送一个 SYN 报 ...

  7. Codeforces Round #582 (Div. 3)-G. Path Queries-并查集

    Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...

  8. Codeforces 348 D - Turtles Lindström–Gessel–Viennot lemma

    #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi first #define se second ...

  9. mybatis3.1-[topic-16-17]-映射文件_增删改查_insert_获取自增主键的值

    笔记要点出错分析与总结 /**测试第16章的增,删,改 的内容 * 错误1: <insert id="addEmp" parameterType="com.bean ...

  10. 如何在C中传递二维数组作为参数?

    回答: 在C语言中,有很多方法可以将2d数组作为参数传递.在下面的部分中,我描述了将2d数组作为参数传递给函数的几种方法. 使用指针传递2d数组以在c中运行 多维数组的第一个元素是另一个数组,所以在这 ...