diff --git "a/20240514-rest\347\256\200\344\273\213.md" "b/20240514-rest\347\256\200\344\273\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..9a5300ee7a776137868bff60a2c5b84c5ebd23f2 --- /dev/null +++ "b/20240514-rest\347\256\200\344\273\213.md" @@ -0,0 +1,79 @@ + 一、API 与 REST + +### 1.什么是 API + +- 是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节 +- API 的主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供 API 所定义的功能的软件称作此 API 的实现。API 是一种接口,故而是一种抽象。 + +### 2.什么是 REST + +- REST 是一种软件构架风格,是一种规定了如何发送和接收数据的方式 +- REST 的核心理念就是将资源(例如文本、图片、音频等等)以统一的接口进行管理,这些资源可以通过 URL 进行访问,并使用标准的 HTTP 方法进行操作 +- REST 和 HTTP 有一定的关系,资源在服务的提供方和请求方之间进行传递,,需要借助协议来约,而 HTTP 协议完全可以满足 REST 中所定义的约束 + +## 二、HTTP 协议 + +### 1.简介 + +HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口 443。 + +HTTP 中最重要的就是 HTTP 协议格式,分为请求协议和响应协议。通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫“请求协议(request)”;服务器发送给客户端的格式叫“响应协议(response)”。 + +### 2.统一资源定位符(URL) + +##### 1.URL 组成部分 + +1. http://(URL 协议):除 http://外,常见的协议还有 https://(加密)、ftp://(文本传输协议)、mailto://(电子邮件协议)等等 +2. www.\*\*\*.com(主机名,也可以叫域名) +3. /user/1(URL 路径):具体指向服务器上的具体资源 +4. 端口号:在主机名后面,以:隔开。HTTP 协议默认使用 80 端口号 +5. 查询字符串:URL 问号后面的参数部分,参数名和参数用=分隔,多个参数用&分隔 +6. 锚部分(片段 Frament):在#后面的内容,用于指明一个资源的特定位置 + 一个完整的 URL 形式如下所示 + +```js +://[:port]/[path][?query][#fragment] + {/* []是可省略部分,<>不可省略 */} +``` + +##### 2.URL 和 URI 的区别 + +URL 是 URI 的子集,一个 URL 就是一个 URI + +### 3.媒体类型 + +##### 1.概念 + +当 HTTP 服务器返回响应时,不但返回资源本身,也会在响应中指明资源的内容类型,就叫做媒体类型。HTTP 依赖于 MIME 标准,媒体类型也叫 MIME 类型。浏览器通过 MIME 类型决定如何处理文档,只有设置正确的 MIME 类型,才会被识别 + +##### 2.常见的 MIME 类型 + +1. text/plain:纯文本 +2. text/html:HTML 内容 +3. image/jpeg/png:表示 JPEG/png 图片 +4. application/json:表示 JSON 格式的数据 + +### 4.HTTP 消息 + +是服务器和客户端之间交换数据的方式,有两种类型:请求消息和响应消息。两种消息都包括以下四个部分的内容: + +- 起始行:用于描述要执行的请求、对应的状态 + 1. HTTP 方法 + - GET:获取资源,但是是不会修改资源,是安全方法(指不会修改资源),而且是幂等方法(多次调用效果总是一样的) + - POST:创建资源,会修改服务器上的资源,不是安全方法,也不是幂等方法 + - PUT:更新资源,会修图该资源,不是安全方法,却是幂等方法;另外当资源不存在,可以实现创建资源 + - DELETE:删除资源,不是安全方法,却是幂等方法 + - PATCH:对资源进行部分更新(例如部分字段或属性),不是安全方法,也不是幂等方法 + - HEAD:与 GRT 相同,但是不返回消息正文,通常用于检测资源是否存在以及获取资源的元数据 + - OPTIONS:获取资源支持的操作 + +### 三、设计资源的 URL 注意原则 + +1. 使用名词的复数形式表示资源集合,如 localhost:3000/books +2. 使用斜线/表示资源之间的层次关系,如/books/1——表示 Id 为 1 的图书信息 +3. 对资源的增删改查操作名称不能包含在 URL 中 +4. 如果一个操作无法对应到资源的某个操作上,可以适当地在 URL 中包含动词,如:【PUT /books/12/set-admin】 +5. 查询字符串可以对资源进行筛选、搜索或分页查询,如【GET /books?Id=12&pageNumber=2】 +6. URL 使用小写字母 +7. 避免使用下划线\_,用中划线—代替 +8. URL 末尾不应该包含斜线/,不但没有意义还会造成歧义 \ No newline at end of file