第 1 章 REST 简介

1.1 API 与 REST

API 是一个系统向外暴露或公开的一套接口,通过这些接口,外部应用程序能够访问该系统

REST 是一种基于资源的架构风格,任何能够命名的对象都是一个资源,如 user,一个资源具有一个统一的资源标识符(URI),如 user/1234,通过 URI 能够标识并访问该资源

REST 定义了6个架构约束:

  • 客户端-服务器
  • 统一接口
  • 分层系统
  • 缓存
  • 无状态
  • 按需编码

统一接口约束本身又由4个子约束组成:

  • 资源的标识
  • 通过表述操作资源
  • 自描述消息
  • 超媒体作为应用程序状态引擎

1.2 HTTP 协议

基于 TCP/IP 协议的应用层协议

浏览网页的过程,就是通过 HTTP 协议来传递浏览器与服务器之间的请求与响应的

HTTP 协议采用请求/响应模型

HTTP 协议采用明文传输数据,这种方式并不安全,所以后来设计了 HTTPS 协议

统一资源定位符(URL)代表网络上一个特定的资源

对于一个 URL,如 http://www.xxx.com/images/logo.png

它由以下几个部分组成:

  • http://,这一部分是 URL 协议,指明了如何访问一个特定的资源
  • www.xxx.com,这一部分是主机名,告诉浏览器所要访问资源所在的服务器名称
  • /images/logo.png,这一部分是 URL 路径,它指向服务器上具体的资源
  • 端口号,在主机后面,以冒号隔开,这一部分通常省略,服务器在这个端口上监听 HTTP 请求
  • 查询字符串,URL 中 “?” 后面的参数部分
  • 锚部分,也称片段,在 “#” 后面的内容,用于指明一个资源的特定的位置

当 HTTP 服务器对请求返回响应时,它不仅仅返回资源本身,也会在响应中指明资源的内容类型(Content Type),也称为媒体类型

要指定内容类型,HTTP 依赖于 MIME 标准,表示文档的性质和格式

常用的 MIME 类型如下:

  • text/plain: 纯文本
  • text/html: HTML
  • image/jepg: JEPG 图片
  • image/png: PNG 图片
  • application/json: JSON格式数据

HTTP 请求消息和响应消息具有相似的结构:

  • 起始行:描述执行的请求,或者对应的状态,成功或失败
  • HTTP 消息头:请求或响应的相关属性、配置、对消息正文的描述等
  • 空行:指明消息头已经发送完毕
  • 消息正文:包含请求数据,或响应中资源的表述

请求起始行包括:

  • HTTP 方法
  • 请求目标
  • HTTP 版本

响应起始行包括:

  • 协议版本
  • 状态码
  • 状态文本

常见的 HTTP 请求方法有:GET、POST、PUT、DELETE、PATCH(部分更新)、HEAD、OPTIONS

HTTP 状态码由3个数字组成,用于指明 HTTP 请求的结果

根据其表述意义,状态码可以分为以下5类:

  • 1xx:信息,服务器收到请求,需要请求方继续执行操作
  • 2xx:成功:服务器成功执行客户端所请求的操作
  • 3xx:重定向:需要进一步的操作以完成请求
  • 4xx:客户端错误:请求包含语法错误或请求内容不正确
  • 5xx:服务端错误:服务器在处理请求的过程中发生了错误

1.3 REST 最佳实践

首先,在实现 RESTful 系统时,应正确地使用 HTTP 方法、HTTP 消息头和 HTTP 状态码

除了原则以外,在设计资源的 URI 时也应该注意以下原则:

  • 使用名词的复数表示一个资源集合
  • 使用斜线 ”/“ 用来表示资源之间的层次关系
  • 对资源的增删改查等操作名称不应该包含在 URL 中
  • 如果一个操作无法对应到资源的某个操作上,此时可以适当地在 URI 中包含动词,但仍然应该基于一个资源的标识符
  • 查询字符串可以用来对资源进行筛选、搜索或分页查询
  • URI 应使用小写字母
  • URI 中可以使用中划线 ”-“ 来增加其可读性
  • URI 中不应使用下划线 ”_“ ,因为会使得 URI 点击时下划线不可见
  • URL 末尾不应包含斜线 ”/“ ,因为没意义而且可能造成歧义

1.4 其他问题

在 RESTful API 中,JSON 和 XML 是最常用到的两种资源表述格式

JSON 是一种轻量级的数据交换格式,数据使用名称/值来表示,中间用冒号隔开

JSON 数据项的值的类型可以是下列类型:

  • 数字
  • 字符串
  • 逻辑值
  • 数组
  • 对象
  • null

XML 与 HTML 语言很相似,包含标签、属性等元素,而且有非常严格的层次结构,一个标签必须同时具有起始标签与结束标签,允许自定义标签

XML 文档必须包含根元素,该元素是文档中其他元素的父元素,文档中的所有元素形成一棵文档树

XML 每个标签之间还必须要正确的嵌套,另外,标签名区分大小写,标签允许包含一个或多个属性,每个属性的值必须使用引号

JSON 比 XML 更简洁,容易解析,但是不支持注释,扩展性不如 XML

RESTful API 添加版本有以下4中方式:

  • 使用 URI 路径,如 api/v1/users
  • 使用查询字符串,如 api/users?version=1
  • 使用自定义消息头,如 Accept-version:v1
  • 使用 Accept 消息头,如 Accept:application/json;v=2.0

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

《ASP.ENT Core 与 RESTful API 开发实战》-- 读书笔记(第1章)的更多相关文章

  1. Spring AOP (Spring 3.x 企业应用开发实战读书笔记第六章)

    从面相对象编程到面相切面编程,是一种代码组织方式的进化. 每一代的代码组织方式,其实是为了解决当时面对的问题.比如写编译器和写操作系统的时候的年代当然要pop,比如写界面的时候当然要oop,因为界面这 ...

  2. 使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  3. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  4. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  5. Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)

    前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...

  6. ASP.NET Core 2 High Performance 目录和读书笔记

    ASP.NET Core 2 High Performance 大概的翻看了一下这本书,这本C# 7 and .NET Core 2.0 High Performance内容要好很多,这里先放出对应目 ...

  7. HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识

    一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...

  8. Javascript设计模式与开发实践读书笔记(1-3章)

    第一章 面向对象的Javascript 1.1 多态在面向对象设计中的应用   多态最根本好处在于,你不必询问对象“你是什么类型”而后根据得到的答案调用对象的某个行为--你只管调用行为就好,剩下的一切 ...

  9. Spring3.x企业开发应用实战读书笔记 —— 第三章IoC容器概述

    声明:    本篇博客绝大多数内容为<Spring3.x企业开发应用实战>一书原内容,所有版权归原书作者所有!,仅供学习参考,勿作他用! 3.2 相关Java基础知识 Java语言允许通过 ...

  10. jQuery 实战读书笔记之第二章:选择元素

    基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...

随机推荐

  1. java基础-java面向对象-02-day09

    目录 1. 封装 2. 继承 2.1 什么是方法的重写 2.2 super 2.3 object详解 2.4 equals方法 3. 多态 4. final修饰符 5.抽象类 6. 接口 7. 内部类 ...

  2. 斐波拉契序列的 Go 实现

    本篇文章主要介绍斐波拉契序列的 Go 语言实现. 斐波拉契序列: 前面相邻两项之后构成后一项. 1. 循环迭代 package main import "fmt" const ma ...

  3. bitcask论文翻译/笔记

    翻译 论文来源:bitcask-intro.pdf (riak.com) 背景介绍 Bitcask的起源与Riak分布式数据库的历史紧密相连.在Riak的K/V集群中,每个节点都使用了可插拔的本地存储 ...

  4. wireshark 显示过滤表达式

    转载请注明出处: 1.根据协议过滤: 在显示过滤表达式的输入框中直接输入对应的协议类型即可:http   tcp  udp 2.根据 IP 过滤: 根据源IP地址过滤:如源地址IP为:127.0.0. ...

  5. AvaloniaUI 取消标题栏,无边框无最大最小化,

    AvaloniaUI 取消标题栏,无边框无最大最小化, 创建一个Window控件 并且在Window中添加以下代码 ExtendClientAreaToDecorationsHint="Tr ...

  6. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.14)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  7. [转帖]Nginx access log 按日期保存记录

    https://cloud.tencent.com/developer/article/1958304 $time_iso8601    生成格式:2021-09-18T15:16:35+08:00 ...

  8. [转帖]docker(一):docker pull指定运行平台架构

    https://zhuanlan.zhihu.com/p/539888862 1.概述 大家好,我是欧阳方超.某日要在服务器上部署docker服务,其中要用到nginx,nginx经过pull.sav ...

  9. [粘贴]TiDB Lightning 断点续传

    https://www.bookstack.cn/read/tidb-6.1-zh/tidb-lightning-tidb-lightning-checkpoints.md 大量的数据导入一般耗时数小 ...

  10. [转帖]k8s对接ceph,ceph-csi方式

    1.上传ceph-csi-yaml和ceph-csi-image 两个文件夹到服务器 2.加载 ceph-csi-image里面的镜像 3.将加载好的镜像上传到本地harbor上. 4.修改ceph- ...