RestApi:https://www.cnblogs.com/springyangwc/archive/2012/01/18/2325784.html

RESTFul API设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html这篇是阮一峰老师写的

RESTFul

  由Roy Fielding提出的,RESTFul是一种架构风格,这种风格基于一套预定义的规则,这些规则描述了网络资源是如何定义和寻址的。

  1、资源:万物看成资源

  2、统一接口:CRUD,跟Http Method对应。Create---Post、Read----Get、Update---Put/Patch、Delete----Delete。

  3、URI:统一资源定位符,资源对应的唯一地址

  4、无状态:基于HTTP协议的,前后是不关联的。(登录系统---查询工资---计算税收,这 是有状态的)。无状态的意思就是,直接一个地址,就能拿到工资,就能得到税收。

RESTFul的6个约束,每一个约束对API都有正面或负面的影响

  REST所关注的性能,可扩展、间接性、互操作性、通讯可见性、组件便携性和可靠性都包含在这6个约束里。

  1、客户端-服务端约束:客户端和服务端是分离的,它们可以独自的进化

  2、无状态:客户端和服务端的通讯必须是无状态的,状态应该包含在请求里的,也就是说请求里要包含服务端需要的所有的信息,以便服务端可以理解请求并可以创造上下文

  3、分层系统:就像其他的软件架构一样REST也需要分层结构的,但是不允许某层直接访问不相邻的层

  4、统一接口:这里分为4点,他们是,资源标识符(URI)、资源的操作(也就是方法Method,HTTP动词)、自描述的响应(可以认为是媒体类型Media-Type)、以及状态管理(超媒体作为应用状态的引擎HATEOAS,Hypermedia as the Engine of Application State)

  5、缓存:缓存约束派生于无状态约束,它要求从服务端返回的响应必须明确表明是可缓存的还是不可缓存的

  6、按需编码:这允许客户端可以从服务端访问特定的资源而无需知晓如何处理它们,服务端可以扩展或自定义客户端的功能。

REST-Richardson成熟度模型代表API的成熟度,分4级,0最差,3最好。

  0级,Plain Old XML沼泽:这里HTTP协议只是被用来进行远程交互,协议的其余部分都用错了,都是RPC风格的实现(例如SOAP,尤其是使用WCF的时候)

  1级,资源:每个资源都映射到一个URI上了,但是HTTP方法并没有正确的使用,结果的复杂度不算太高

  2级,动词:正确使用了HTTP动词,状态码也正确的使用了,同时也去掉了不必要的变种

  3级,超媒体:API支持超媒体作为应用状态的引擎HATEOAS,Hypermedia as theEngine of Application State,引入了可发现性

HTTP GET Action

  API资源命名资源应该是用动词,它是个东西,不是动作

  资源应该使用名词,例如:

    api/getusers  这个就是不正确的

    GET api/users  就是正确的,或者GET api/users/{userId}

  其中资源名的单词我喜欢使用复数的形式

  API资源命名--层次结构:

    例如 api/department/{departmentId}/emoloyess,这几表示了department(部门)和员工(employee)之间是主从关系。而api/department/{departmentId}/emplss/{emploId},这就表示了该部门下的某个员工。

  API资源命名--过滤排序

    过滤和排序,不是资源,应该作为参数,例如:

    api/users?orderby=username

  API资源的ID

    资源的URI应该是永远都一样的,推荐GUID作为ID来使用,自增int类型的ID,在迁移到新数据库时需要特殊设定,保证ID值不会发生变化。

HTTP方法与资源交互

注意:

  HEAD:和GET差不多,但是它不应该返回响应的body,所以没有响应的payload,它主要是用来获取资源的一些信息,例如查看资源是否可用等

  OPTIONS:它是用来查询某个资源URI的可交互方式有哪些,换句话时候就是,使用它可用知道某个URI是否可用执行GET或者POST动作,这些动作通常是在响应的Header是里面而不是body里,所以也没有响应的payload。

状态码

  可以参考:http://tool.oschina.net/commons?type=5

  状态码会告诉API的消费者,请求是否如逾期的成功,或者失败。如果出现了错误,谁该为这个错误负责。

  API主要用到了:

    200级别,表示成功

    400级别,表示客户端引起的错误

    500级别,表示服务器错误

内容协商:

  如果资源支持多种展现格式,那么消费者可以选择它想要的格式。在请求的Accept Header指定Media Type ,application/json,application/xml,若未指定,默认返回application/json,请求的media type不可用时,并且消费者不支持默认格式,返回406

APS.NET Core里的内容协商:

  ASP.NET Core支持输出和输入两种格式化器。

    用于输出的media type放在Accept Header里,表示客户端接受这种格式的输出。

    用于输入的media type放在Content-Type Header里。表示客户端传进AI的数据是这种格式。

    ReturnHttpNotAcceptable设为true,就会返回406.

  

RESTFul&HTTP GET简介的更多相关文章

  1. Jersey框架一:Jersey RESTful WebService框架简介

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  2. 请求与上传文件,Session简介,Restful API,Nodemon

    作者 | Jeskson 来源 | 达达前端小酒馆 请求与上传文件 GET请求和POST请求 const express = require('express'); const app = expre ...

  3. Go Web:RESTful web service示例

    RESTful架构的简介 web服务的架构模式主要有2种:SOAP和REST.SOAP和REST都回答了同一个问题:如何访问web服务. SOAP风格的程序是功能驱动的,要借助xml来传递数据,明确表 ...

  4. Eclipse + Jersey 发布RESTful WebService(一)了解Maven和Jersey,创建一个WS项目(成功!)

    一.下文中需要的资源地址汇总 Maven Apache Maven网站 http://maven.apache.org/ Maven下载地址: http://maven.apache.org/down ...

  5. Flask中的RESTFul

    RESTFul 1.什么是RESTFul? 1.1 简介 REST即表述性状态传递(英文:Representational State Transfer, 简称REST)是Roy Fielding博士 ...

  6. Jersey框架三:Jersey对HTTPS的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  7. Jersey框架二:Jersey对JSON的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  8. 分布式系统的那些事儿(六) - SOA架构体系

    有十来天没发文了,实在抱歉!最近忙着录视频,同时也做了个开源的后台管理系统LeeCX,目前比较简单,但是后续会把各类技术完善.具体可以点击“原文链接”. 那么今天继续说分布式系统的那些事. 我们现在动 ...

  9. webservice框架jersey 文章

    webservice框架jersey简单总结 Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 ...

随机推荐

  1. selenium设置谷歌无头浏览器

    from selenium import webdriver from selenium.webdriver.chrome.options import Options def Browse(): c ...

  2. 对象流,它们是一对高级流,负责即将java对象与字节之间在读写的过程中进行转换。 * java.io.ObjectOutputStream * java.io.ObjectInputStream

    package seday06; import java.io.Serializable;import java.util.Arrays; /** * @author xingsir * 使用当前类来 ...

  3. Implement Custom Business Classes and Reference Properties实现自定义业务类和引用属性(EF)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...

  4. 你看不懂的spring原理是因为不知道这几个概念

    背景 问题从一杯咖啡开始. 今天我去楼下咖啡机买了一杯「粉黛拿铁」.制作过程中显示: 我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力.咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉得 ...

  5. 【前端知识体系-NodeJS相关】对NodeJS模块机制的理解

    1. CommonJS模块规范 1.1 模块引用 var math = require('math'); 1.2 模块定义 [!NOTE] 上下文提供exports对象用于导出当前模块的方法和变量,并 ...

  6. ES6 -箭头函数 ,对象的函数解构

    ES6 -箭头函数: //es6 中的箭头函数和扩展 //es5的写法 // function add(a,b){ // return a + b; // } // add(1,2); //3 fun ...

  7. 转战物联网·基础篇09-选择MQTT协议还是CoAP协议

      前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境.   XMPP协议也有人说是适合物联网通信的,但它是基于XML, ...

  8. pymysql连接

    import pymysql conn=pymysql.connect(host='localhost',user='root',password='123',db='sg',charset='utf ...

  9. Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑(二)

    django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...

  10. Linux-3.14.12内存管理笔记【构建内存管理框架(2)】

    前面构建内存管理框架,已经将内存管理node节点设置完毕,接下来将是管理区和页面管理的构建.此处代码实现主要在于setup_arch()下的一处钩子:x86_init.paging.pagetable ...