《ASP.ENT Core 与 RESTful API 开发实战》-- 读书笔记(第1章)
第 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章)的更多相关文章
- Spring AOP (Spring 3.x 企业应用开发实战读书笔记第六章)
从面相对象编程到面相切面编程,是一种代码组织方式的进化. 每一代的代码组织方式,其实是为了解决当时面对的问题.比如写编译器和写操作系统的时候的年代当然要pop,比如写界面的时候当然要oop,因为界面这 ...
- 使用ASP.NET Core构建RESTful API的技术指南
译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...
- iPhone与iPad开发实战读书笔记
iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...
- <<Java RESTful Web Service实战>> 读书笔记
<<Java RESTful Web Service实战>> 读书笔记 第一章 JAX-RS2.0入门 REST (Representational State ransf ...
- Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,I ...
- ASP.NET Core 2 High Performance 目录和读书笔记
ASP.NET Core 2 High Performance 大概的翻看了一下这本书,这本C# 7 and .NET Core 2.0 High Performance内容要好很多,这里先放出对应目 ...
- HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识
一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...
- Javascript设计模式与开发实践读书笔记(1-3章)
第一章 面向对象的Javascript 1.1 多态在面向对象设计中的应用 多态最根本好处在于,你不必询问对象“你是什么类型”而后根据得到的答案调用对象的某个行为--你只管调用行为就好,剩下的一切 ...
- Spring3.x企业开发应用实战读书笔记 —— 第三章IoC容器概述
声明: 本篇博客绝大多数内容为<Spring3.x企业开发应用实战>一书原内容,所有版权归原书作者所有!,仅供学习参考,勿作他用! 3.2 相关Java基础知识 Java语言允许通过 ...
- jQuery 实战读书笔记之第二章:选择元素
基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...
随机推荐
- 【内核】深入分析内核panic(三)--内核错误处理流程
1 内核错误处理方式 当内核出现致命错误时,只要cpu还能正常运行,那么最重要的就是向用户输出详细的错误信息,以及保存问题出现时的错误现场.以上致命错误可包含以下两种类型: (1)硬件能检测到的错误, ...
- S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 uboot启动内核分析 进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm(): int do ...
- pmp考试巩固知识点
1.冲刺评审会是需要相关的干系人参加的,在冲刺评审会上干系人可以审查并澄清角色.责任和管理模式2.采购中的争议,往往找合同和SOW,SOW是对需要采购的详细范围的描述,与供应商在可交付成果方面有争议时 ...
- spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
本文为博主原创,转载请注明出处: 在spring cloud gateway 为 2.x 的版本的时候,可以通过引入 ribbon ,在进行过滤器 LoadBalancerClientFilter 进 ...
- 【C/C++】 开发必备知识总结
>from: C/C++ 开发必备知识总结 (qq.com) const 作用 修饰变量,说明该变量不可以被改变: 修饰指针,分为指向常量的指针和指针常量: 常量引用,经常用于形参类型,即避免了 ...
- 【KEIL 】Options for File
使用" 项目 "窗口的上下文菜单打开此对话框 :菜单选项项目.该对话框包括带有三态替代项的复选框: -已选中且呈灰色 -属性是从父对象继承的.- 选中和白色 -为对象单独设置的属性 ...
- RabbitMQ .net core 客户端 EasyNetQ 的使用
依赖注入 var connectionConfiguration = new ConnectionConfiguration { Hosts = new List<HostConfigurati ...
- linux环境C语言实现:h265与pcm封装成AVI格式
前言 不知道是处于版权收费问题还是什么原因,H265现在也并没有非常广泛的被普及.将h265数据合成AVI的资料现在在网上也基本上没有.使用格式化工厂工具将h265数据封装成AVI格式,发现它在封 ...
- [转帖]如何不耍流氓的做运维之-SHELL脚本
https://www.cnblogs.com/luoahong/articles/8504691.html 前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHE ...
- [转帖]优化超大 Nginx 配置导致的内存碎片
https://blog.openresty.com.cn/cn/ngx-cycle-pool-frag/?src=org_news 章亦春发布于 Feb 14, 2023更新于 Mar 2, 202 ...