本节内容总结和概括 <ASP.NET CORE 与 RESTful 开发实战> 书中的第一章节内容. 并将收录于该系列的笔记目录下.html
符合如下约束的 web 服务才是真正的 RESTful 服务:web
约束条件 | 介绍 |
---|---|
客户端 - 服务端 | 这个约束主要是从开发者角度将关注点分离, 客户端和服务端可使用不一样的技术栈实现独立开发, 只要它们之间的接口不改变便可. |
具有统一接口 | - |
是分层的系统 | 客户端和服务端之间一般会有一层代理或者网关. 客户端和服务端能够没必要知道这个代理与网关. 可是它的做用是能够有不少, 好比鉴权, 限流, 复杂均衡等等. |
缓存能力 | 缓存号称是是 web 服务开发之友 |
无状态的 | 客户端发送到服务端的每一个请求必须是无状态的请求. 这就要求服务端不须要记住和存储任何客户端的信息. 反之这些信息都由客户端保存和维护. 所以客户端对服务端的请求不能依赖于已发生的请求, 当客户端与服务端发生通讯时, 必须包含全部与之相关的信息, 如身份认证信息等等. |
按需编码 | 容许服务端临时向客户端返回可执行的程序代码, 主要用于客户端提供可扩展性和自定义的功能. (这部分我还没有接触过, 读到这里还不可以马上理解.) |
RPC 风格简单介绍
除了 REST 外, 另外一种常见的 API 风格是 RPC 风格, 即远程过程调用(Remote - Procedure - Call). 它与 REST 的区别以下: json在关注点方面, REST 面向的是资源, RPC面向的是功能. 在 API endpoint 方面, REST 的 endpoint 是名词, 是资源或者资源集合, 而 RPC 的端点是动词, 是方法名. 在执行特色方面, REST 对资源执行操做, RPC 执行服务器上的方法. 在返回的结果方面, REST 返回的是请求的资源, 而 RPC 则返回调用方法的执行结果.
那么根据个人理解, REST 主要是提供对于资源的操做, 而 RPC 则是提供一种功能的服务.
笔者感言:
书中提到几乎全部的状况下, REST 是基于 HTTP 协议实现的. 笔者也苟同, 由于本人做为后端 API 开发时, 一般也会和 HTTP 相关的内容常常打交道. 因此深刻理解 HTTP 协议将有助于开发者开发出更好更高质量的 API. 因此对于 HTTP 不够了解的同窗最好能够去找找相关的专业的材料学习和巩固一下.后端
上图呢是一张高度归纳了不少不少内容的图.api
POST http://api.appdomain.com/users
PUT http://api.appdomain.com/users/1跨域
head | desc | example |
---|---|---|
Accept | content-type | Accept:application/json |
Accept-Charset | 可接受的字符集 | Accept-Charset:utf-8 |
Accept-Encoding | 可接受的响应内容的编码方式 | Accept-Encoding:gzip |
Authorization | 表示资源须要认证的信息 | Authentication: Bearer dfsdfsdfsdfs... |
Cache-Control | 用来指定当前请求是否使用缓存 | cache-control:no-cache |
connection | 客户端想要使用的链接类型 | connection:keep-alive |
cookie | 向服务器提供 cookie | cookie:name=value;name2=value2 |
content-length | 请求正文的长度 | content-length:348 |
content-type | 请求正文的 MIME 类型 | content-type:application/json |
date | 发送该消息的日期和时间 | date:dec.26 |
host | 服务器主机名以及使用的端口号 | - |
if-match | 仅当客户端提供的值与服务器上对应的值相匹配时,才进行对应的操做 | if-match:"12314" |
if-modified-since | 容许当请求资源未被修改时, 返回 304 not modified 代码 | - |
origin | 用于发起一个跨域的资源共享请求 | Origin:http://www.domain.com |
Proxy-Authorization | 用于向代理进行认证的认证信息 | Proxy-Authorization: Basic xxxx |
User-Agent | 用于浏览器表示身份的字符串 | User-Agent:xxx |
head | desc | example |
---|---|---|
Allow | 用于指定资源容许的操做 | Allow: Get |
Cache-control | 指明该响应使用的缓存机制 | Cache-control:max-age=3600 |
Connection | 针对该连接所预期的选项 | connection:close |
content-encoding | 响应正文所使用的编码类型 | content-encoding:gzip |
content-type | 响应正文的MIME类型 | content-type:text/html;charset=utf-8 |
除此外, 还有 http 的状态码, 表示不一样的请求的响应对应的状态.浏览器