From 1bc58618bcc0f50c5710c9caf21b5e6566278f99 Mon Sep 17 00:00:00 2001 From: zhao <123> Date: Sun, 19 May 2024 13:51:37 +0800 Subject: [PATCH 1/6] =?UTF-8?q?5=E6=9C=8816=E6=97=A5=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0516webapi\345\205\245\351\227\250.md" | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 "\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" diff --git "a/\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" "b/\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" new file mode 100644 index 0000000..917184a --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" @@ -0,0 +1,108 @@ +### 学习目标 + +* 了解Web API是什么以及它的主要用途 +* 能够创建和使用简单的Web API +* 了解Web API的路由和HTTP方法 +* 能够处理Web API的请求和响应 +* 了解Web API的安全性措施 + +### 内容大纲 + +#### 1\. Web API基础 + +* 什么是Web API? +* Web API的主要用途 +* Web API的架构 + +#### 2\. 创建简单的Web API + +* 使用ASP.NET Core创建Web API +* 了解Web API的控制器和方法 +* 测试Web API + +#### 3\. Web API的路由和HTTP方法 + +* 了解Web API的路由 +* 了解HTTP方法 +* 使用路由和HTTP方法 + +#### 4\. 处理Web API的请求和响应 + +* 处理HTTP请求 +* 处理HTTP响应 +* 返回不同类型的数据 + +#### 5\. Web API的安全性 + +* 了解Web API的安全性 +* 身份验证和授权 +* 数据加密 + +#### 6\. 进阶主题 + +* Web API的版本控制 +* Web API的文档化 +* Web API的测试和调试 + + + +## Web API入门笔记 + +#### 1\. 什么是Web API? + +Web API是一种允许软件应用之间进行交互的技术。它提供了一组接口,通过这些接口,应用程序可以请求和接收数据,或者执行特定的操作。Web API通常使用HTTP协议进行通信,可以返回数据格式如JSON或XML。 + +#### 2\. Web API的主要用途 + +* **数据交换**:允许不同的应用程序共享和交换数据。 +* **服务集成**:集成第三方服务,如支付、地图、社交网络等。 +* **自动化**:自动化任务,如数据同步、报告生成等。 + +#### 3\. 创建一个简单的Web API + +以下是一个使用ASP.NET Core创建的简单Web API示例: +```js + using Microsoft.AspNetCore.Mvc; + + namespace MyWebApi.Controllers + { + [ApiController] + [Route("[controller]")] + public class HelloWorldController : ControllerBase + { + [HttpGet] + public ActionResult Get() + { + return "Hello, World!"; + } + } + } +``` + +在这个示例中,我们创建了一个名为`HelloWorldController`的控制器,它包含一个`Get`方法,当通过HTTP GET请求访问时,返回字符串"Hello, World!"。 + +#### 4\. Web API的路由和方法 + +* **路由**:定义了如何将HTTP请求映射到控制器的方法上。在上面的例子中,`[Route("[controller]")]`意味着控制器的方法可以通过`/HelloWorld`访问。 +* **方法**:如`[HttpGet]`,指定了HTTP请求的类型。Web API支持多种HTTP方法,如GET、POST、PUT、DELETE等。 + +#### 5\. 处理请求和响应 + +* **请求**:客户端通过HTTP请求发送数据到Web API。 +* **响应**:Web API处理请求后,通过HTTP响应返回数据给客户端。 + +#### 6\. 测试Web API + +可以使用工具如Postman或浏览器来测试Web API。例如,对于上面的`HelloWorldController`,可以在浏览器中输入`http://localhost:5000/HelloWorld`来查看返回的"Hello, World!"。 + +#### 7\. 安全性 + +Web API的安全性非常重要,常见的安全措施包括: + +* **身份验证**:验证用户的身份。 +* **授权**:确定用户是否有权限访问特定的资源。 +* **数据加密**:保护数据在传输过程中的安全。 + +#### 8\. 总结 + +Web API是现代软件开发中的一个重要组成部分,它允许不同的应用程序和服务之间进行有效的通信和数据交换。通过学习和实践,你可以掌握如何创建和使用Web API来增强你的应用程序的功能和灵活性。 \ No newline at end of file -- Gitee From a10310c98d7ce4556d7f4e778faa08fcd741b110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=85=B0=E8=8E=B9?= Date: Sun, 19 May 2024 06:10:07 +0000 Subject: [PATCH 2/6] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\344\275\234\344\270\232/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/.keep" diff --git "a/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/.keep" "b/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From ec6910e281752e891f746f4dda5e5f1c5feb92e0 Mon Sep 17 00:00:00 2001 From: zhao <123> Date: Sun, 19 May 2024 14:12:31 +0800 Subject: [PATCH 3/6] lll --- .../\344\275\234\344\270\232/1111.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" diff --git "a/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" "b/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" new file mode 100644 index 0000000..9cb472b --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" @@ -0,0 +1 @@ +# 一写作业一时爽,不写作业一直爽 \ No newline at end of file -- Gitee From 731998c9419c028df96db48ad1d535e25bc5dbab Mon Sep 17 00:00:00 2001 From: "you@example.com" Date: Mon, 20 May 2024 14:15:49 +0800 Subject: [PATCH 4/6] ppppppppp --- .../0516webapi\345\205\245\351\227\250.md" | 0 "\350\256\270\345\205\260\350\216\271/0520Webapilll.md" | 1 + .../\344\275\234\344\270\232/.keep" | 0 .../\344\275\234\344\270\232/1111.md" | 1 - 4 files changed, 1 insertion(+), 1 deletion(-) rename "\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" => "\350\256\270\345\205\260\350\216\271/0516webapi\345\205\245\351\227\250.md" (100%) create mode 100644 "\350\256\270\345\205\260\350\216\271/0520Webapilll.md" delete mode 100644 "\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/.keep" delete mode 100644 "\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" diff --git "a/\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" "b/\350\256\270\345\205\260\350\216\271/0516webapi\345\205\245\351\227\250.md" similarity index 100% rename from "\350\256\270\345\205\260\350\216\271/\347\254\224\350\256\260/0516webapi\345\205\245\351\227\250.md" rename to "\350\256\270\345\205\260\350\216\271/0516webapi\345\205\245\351\227\250.md" diff --git "a/\350\256\270\345\205\260\350\216\271/0520Webapilll.md" "b/\350\256\270\345\205\260\350\216\271/0520Webapilll.md" new file mode 100644 index 0000000..5ae2b5a --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0520Webapilll.md" @@ -0,0 +1 @@ +金石为开 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/.keep" "b/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" "b/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" deleted file mode 100644 index 9cb472b..0000000 --- "a/\350\256\270\345\205\260\350\216\271/\344\275\234\344\270\232/1111.md" +++ /dev/null @@ -1 +0,0 @@ -# 一写作业一时爽,不写作业一直爽 \ No newline at end of file -- Gitee From 26e1c2f9641240d40a5642753e62c277f08f4fb2 Mon Sep 17 00:00:00 2001 From: "you@example.com" Date: Mon, 20 May 2024 14:54:20 +0800 Subject: [PATCH 5/6] \ --- .../20240517-REST\347\256\200\344\273\213.md" | 33 ------- "\344\275\231\350\276\211/20240514.md" | 26 ----- ...024.05.14-REST\347\256\200\344\273\213.md" | 34 ------- ...024.05.14-REST\347\256\200\344\273\213.md" | 62 ------------ ...0240516-\350\256\244\350\257\206webapi.md" | 36 ------- ...0240516-Webapi\346\246\202\345\277\265.md" | 23 ----- "\345\217\262\347\247\200\347\272\242/.keep" | 0 ...024-05-14-REST\347\256\200\344\273\213.md" | 60 ------------ "\345\217\266\346\235\250/.keep" | 0 ...2\204 Web API \347\261\273\345\236\213.md" | 36 ------- ...0240516-\350\256\244\350\257\206webapi.md" | 36 ------- .../20240517-http\347\275\221\345\235\200.md" | 75 -------------- .../20240514-1.API\345\222\214REST.md" | 30 ------ ...0240516-\350\256\244\350\257\206webapi.md" | 36 ------- ...0240514-webapi\347\256\200\344\273\213.md" | 33 ------- .../.keep" | 0 .../20240514-Rest.md" | 57 ----------- .../20240514--API\344\270\216REST.md" | 55 ----------- "\346\235\250\345\256\201/20240514-rest.md" | 98 ------------------- .../20240514_api.md" | 57 ----------- .../20240516_first.md" | 1 - "\346\236\227\347\243\212/2024-05-14.md" | 9 -- "\346\236\227\347\243\212/2024-05-16.md" | 31 ------ .../20240514-rest\347\256\200\344\273\213.md" | 79 --------------- .../20240514-Rest.md" | 57 ----------- .../20240516\347\256\200\344\273\213.md" | 27 ----- .../20240514-API\345\222\214REST.md" | 30 ------ .../20240516 rest\347\256\200\344\273\213" | 64 ------------ ...0240516-\345\210\235\345\247\213webapi.md" | 37 ------- ...0240514-Webapi\344\273\213\347\273\215.md" | 36 ------- .../20240514-API\345\222\214REST.md" | 30 ------ .../20240519_Rest.md" | 98 ------------------- "\350\265\265\346\254\243/0516.md" | 54 ---------- .../20240514_api.md" | 98 ------------------- ...pi\347\232\204\346\246\202\345\277\265.md" | 17 ---- .../20240514-\345\210\235\350\257\206api.md" | 96 ------------------ "\351\203\221\345\256\266\347\202\234/.keep" | 0 ...0240516-\350\256\244\350\257\206webapi.md" | 36 ------- ...0240516-\345\210\235\345\247\213WebApi.md" | 39 -------- .../20240514_api.md" | 55 ----------- .../20240514.API\344\270\216REST.md" | 57 ----------- ...0240516-\345\210\235\345\247\213webapi.md" | 37 ------- ...0240516-\350\256\244\350\257\206webapi.md" | 34 ------- ...024-05-14-REST\347\256\200\344\273\213.md" | 79 --------------- .../20240514API\344\270\216REST.MD" | 57 ----------- .../20240514-Rest\347\256\200\344\273\213.md" | 30 ------ ...2024.5.16webapi\344\273\213\347\273\215md" | 53 ---------- .../20240514-Rest.md" | 57 ----------- ...024.05.14-REST\347\256\200\344\273\213.md" | 34 ------- ...0240515-webapi\346\246\202\350\277\260.md" | 41 -------- .../20240514.API\344\270\216REST.md" | 61 ------------ .../20240514_REST\347\256\200\344\273\213.md" | 98 ------------------- 52 files changed, 2319 deletions(-) delete mode 100644 "\344\275\231\346\242\246\345\251\267/20240517-REST\347\256\200\344\273\213.md" delete mode 100644 "\344\275\231\350\276\211/20240514.md" delete mode 100644 "\344\276\257\345\235\244\351\241\272/2024.05.14-REST\347\256\200\344\273\213.md" delete mode 100644 "\345\210\230\344\270\234\345\275\252/2024.05.14-REST\347\256\200\344\273\213.md" delete mode 100644 "\345\215\240\347\277\212\345\206\233/20240516-\350\256\244\350\257\206webapi.md" delete mode 100644 "\345\215\242\345\273\272\347\245\245/20240516-Webapi\346\246\202\345\277\265.md" delete mode 100644 "\345\217\262\347\247\200\347\272\242/.keep" delete mode 100644 "\345\217\262\347\247\200\347\272\242/2024-05-14-REST\347\256\200\344\273\213.md" delete mode 100644 "\345\217\266\346\235\250/.keep" delete mode 100644 "\345\217\266\346\235\250/2024-05-16\345\270\270\350\247\201\347\232\204 Web API \347\261\273\345\236\213.md" delete mode 100644 "\345\217\266\346\242\246\347\224\237/20240516-\350\256\244\350\257\206webapi.md" delete mode 100644 "\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" delete mode 100644 "\345\220\264\350\257\227\350\214\265/20240514-1.API\345\222\214REST.md" delete mode 100644 "\345\224\220\345\255\235\345\235\232/20240516-\350\256\244\350\257\206webapi.md" delete mode 100644 "\345\247\232\346\242\246\347\224\267/20240514-webapi\347\256\200\344\273\213.md" delete mode 100644 "\345\274\240\346\240\207\346\230\237\345\256\211/.keep" delete mode 100644 "\345\274\240\346\240\207\346\230\237\345\256\211/20240514-Rest.md" delete mode 100644 "\346\235\250\345\217\257\347\233\210/20240514--API\344\270\216REST.md" delete mode 100644 "\346\235\250\345\256\201/20240514-rest.md" delete mode 100644 "\346\236\227\346\230\245\347\277\224/20240514_api.md" delete mode 100644 "\346\236\227\347\216\211\346\225\217/20240516_first.md" delete mode 100644 "\346\236\227\347\243\212/2024-05-14.md" delete mode 100644 "\346\236\227\347\243\212/2024-05-16.md" delete mode 100644 "\346\261\244\345\270\214\351\224\220/20240514-rest\347\256\200\344\273\213.md" delete mode 100644 "\347\216\213\345\256\235sen/20240514-Rest.md" delete mode 100644 "\347\231\275\345\251\211\345\251\267/20240516\347\256\200\344\273\213.md" delete mode 100644 "\347\274\252\346\242\223\344\272\250/20240514-API\345\222\214REST.md" delete mode 100644 "\350\202\226\346\226\207\346\205\247/20240516 rest\347\256\200\344\273\213" delete mode 100644 "\350\222\262\346\230\214\346\234\210/20240516-\345\210\235\345\247\213webapi.md" delete mode 100644 "\350\242\201\344\271\213\346\201\222/20240514-Webapi\344\273\213\347\273\215.md" delete mode 100644 "\350\256\270\346\231\250/20240514-API\345\222\214REST.md" delete mode 100644 "\350\265\226\345\277\227\347\224\237/20240519_Rest.md" delete mode 100644 "\350\265\265\346\254\243/0516.md" delete mode 100644 "\350\277\236\345\242\236\351\222\261/20240514_api.md" delete mode 100644 "\351\202\261\346\245\267\346\235\255/20240514 - webapi\347\232\204\346\246\202\345\277\265.md" delete mode 100644 "\351\202\271\347\246\217\347\247\221/20240514-\345\210\235\350\257\206api.md" delete mode 100644 "\351\203\221\345\256\266\347\202\234/.keep" delete mode 100644 "\351\203\221\345\256\266\347\202\234/20240516-\350\256\244\350\257\206webapi.md" delete mode 100644 "\351\203\255\345\205\201\346\226\214/20240516-\345\210\235\345\247\213WebApi.md" delete mode 100644 "\351\222\237\351\270\243\346\235\260/20240514_api.md" delete mode 100644 "\351\231\210\344\275\263\344\270\275/20240514.API\344\270\216REST.md" delete mode 100644 "\351\231\210\344\277\212\350\261\252/20240516-\345\210\235\345\247\213webapi.md" delete mode 100644 "\351\231\210\345\237\271\346\235\260/20240516-\350\256\244\350\257\206webapi.md" delete mode 100644 "\351\231\210\345\256\227\344\271\211/2024-05-14-REST\347\256\200\344\273\213.md" delete mode 100644 "\351\231\210\351\270\277\345\246\202/20240514API\344\270\216REST.MD" delete mode 100644 "\351\242\234\346\234\235\345\213\207/20240514-Rest\347\256\200\344\273\213.md" delete mode 100644 "\351\253\230\344\277\212\346\235\260/2024.5.16webapi\344\273\213\347\273\215md" delete mode 100644 "\351\255\217\345\255\220\345\215\216/20240514-Rest.md" delete mode 100644 "\351\273\204\345\215\216\351\233\250/2024.05.14-REST\347\256\200\344\273\213.md" delete mode 100644 "\351\273\204\345\244\251\344\274\237/20240515-webapi\346\246\202\350\277\260.md" delete mode 100644 "\351\273\204\347\216\211\346\235\255/20240514.API\344\270\216REST.md" delete mode 100644 "\351\273\204\351\233\252\350\212\263/20240514_REST\347\256\200\344\273\213.md" diff --git "a/\344\275\231\346\242\246\345\251\267/20240517-REST\347\256\200\344\273\213.md" "b/\344\275\231\346\242\246\345\251\267/20240517-REST\347\256\200\344\273\213.md" deleted file mode 100644 index cf9a67c..0000000 --- "a/\344\275\231\346\242\246\345\251\267/20240517-REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,33 +0,0 @@ -### API与REST - -API(Application Programming Interface,应用程序编程接口)是一组定义了软件组件如何相互交互的规范。它允许不同的软件系统之间进行通信,以实现特定的功能或服务。 - -REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,用于设计网络应用程序。它基于HTTP协议,通过定义资源的标识符(URI)和对资源的操作(HTTP方法),实现了客户端和服务器之间的通信。RESTful API遵循REST原则,提供了一种灵活、可扩展且易于理解的方式来构建和设计API。 - -### HTTP协议 - -HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议。它是互联网上数据交换的基础,通常用于在Web浏览器和服务器之间传输网页和资源。HTTP基于客户端-服务器模型,客户端发送HTTP请求,服务器返回HTTP响应。 - -HTTP请求由请求方法、请求URI、协议版本、请求头部和请求体组成。常用的HTTP请求方法包括GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。 - -HTTP响应由状态码、响应头部和响应体组成。状态码指示了请求的处理结果,常见的状态码包括200(成功)、404(未找到资源)、500(服务器内部错误)等。 - -### REST约束 - -REST架构风格包括一系列的约束条件,以确保系统的可伸缩性、简单性和可移植性。其中一些重要的REST约束包括: - -1. **客户端-服务器架构**:客户端和服务器分离,使得客户端和服务器可以独立地演化和扩展。 -2. **无状态性**:每个请求都包含了足够的信息,使得服务器可以理解并处理请求,而不需要依赖于之前的请求或会话状态。 -3. **缓存**:服务器可以对响应进行标记,以便客户端可以缓存响应并重复利用它们,从而提高性能。 -4. **统一接口**:通过统一的接口(例如URI、资源操作、媒体类型)来简化系统架构,并使得不同的组件可以独立演化。 -5. **分层系统**:通过层次化架构,使得客户端不需要了解整个系统的结构,只需与其交互的接口。 - -### 对REST的错误理解 - -1. **REST是一种协议**:实际上,REST是一种架构风格而不是协议。它基于HTTP协议,但并不限制于HTTP。虽然大多数RESTful API都使用HTTP作为通信协议,但它们也可以在其他协议上运行,如WebSocket。 - -2. **每个HTTP接口都是RESTful的**:即使一个API使用HTTP,并且使用了一些RESTful的理念,但并不意味着它就是真正的RESTful API。RESTful API需要遵循一系列约束条件,如无状态、统一接口等,而不仅仅是使用HTTP协议。 - -3. **URI中的动词表示操作**:RESTful API中,URI应该表示资源而不是操作。操作应该由HTTP方法来表示,例如GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。 - -4. **RESTful API需要使用所有的REST约束**:虽然RESTful API应该尽可能地遵循REST约束,但并不是所有的约束都适用于所有的情况。有时候根据实际情况做出权衡是可以接受的,例如在需要保持会话状态的应用中,无状态性约束可能无法完全实现。 \ No newline at end of file diff --git "a/\344\275\231\350\276\211/20240514.md" "b/\344\275\231\350\276\211/20240514.md" deleted file mode 100644 index 4ae6377..0000000 --- "a/\344\275\231\350\276\211/20240514.md" +++ /dev/null @@ -1,26 +0,0 @@ -### API与REST设计资源的URL注意原则和API版本 - -### 一、设计资源的URL注意原则: - -1. **使用名词的复数形式**:表示资源集合,如`/books`表示图书集合。 -2. **使用斜线/表示层次关系**:如`/books/1`表示Id为1的图书信息。 -3. **避免在URL中包含操作名称**:增删改查等操作应该通过HTTP方法来区分。 -4. **对于无法映射到资源操作的操作**:可以在URL中包含动词,如`PUT /books/12/set-admin`。 -5. **使用查询字符串进行筛选、搜索、分页**:如`GET /books?Id=12&pageNumber=2`。 -6. **URL使用小写字母**:统一风格,避免大小写混淆。 -7. **避免使用下划线_**:使用中划线-代替,提高可读性。 -8. **URL末尾不包含斜线/**:避免造成歧义和不必要的请求。 - -### 二、API版本的添加方式: - -1. **使用URL路径**:常见方式,如`/v1/books`表示版本1的图书资源。 -2. **使用查询字符串**:如`/books?version=v1`指定API版本。 -3. **使用自定义消息头**:通过自定义消息头,如`Accept-version: v1`指定API版本。 -4. **使用Accept消息头**:在请求头中使用Accept字段,如`Accept: application/json; v=2.0`指定API版本。 - -### 补充总结: -- **版本控制的重要性**:API版本控制是为了确保API的稳定性和向后兼容性,在API发生变化时能够有效管理和维护不同版本的API。 -- **选择合适的版本控制方式**:根据项目需求和实际情况选择合适的API版本控制方式,确保API的易用性和可维护性。 -- **遵循RESTful设计原则**:设计API时应该遵循RESTful设计原则,包括资源的表示、操作的方式等,以提供一致性和易用性的API接口。 - -通过合理设计资源的URL和使用适当的API版本控制方式,可以提高API的可用性、可维护性和扩展性,为开发者提供更好的开发体验和更稳定的接口调用环墋。 \ No newline at end of file diff --git "a/\344\276\257\345\235\244\351\241\272/2024.05.14-REST\347\256\200\344\273\213.md" "b/\344\276\257\345\235\244\351\241\272/2024.05.14-REST\347\256\200\344\273\213.md" deleted file mode 100644 index 9666683..0000000 --- "a/\344\276\257\345\235\244\351\241\272/2024.05.14-REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,34 +0,0 @@ -#### REST简介 -REST 是一组架构规范,并非协议或标准。API 开发人员可以采用各种方式实现 REST。 - -当客户端通过 RESTful API 发出请求时,它会将资源状态的表示方式传递给请求者或终端。这个信息或表述会通过 HTTP 以下列某种格式传输:JSON(Javascript 对象标记)、HTML、XLT、Python、PHP 或纯文本。JSON 是最常用的编程语言,虽然它的名字寓意“标记 JavaScript 对象”,但它适用于各种语言,并且人和机器都能读。 - -注意事项:如果想发送一个遵循 RESTful 风格的 HTTP 请求,请求头和请求参数也同样很重要,因为里面会包含请求的元数据、授权、统一资源标识符(URI)、缓存、cookie 等重要标识信息。而每个请求头和响应头,都有自己的 HTTP 连接信息和状态码。 - - -#### API和REST -API -Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 - -REST -HTTP总共包含八种方法: - -``` -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -``` -● 2xx = Success(成功) - -● 3xx = Redirect(重定向) - -● 4xx = User error(客户端错误) - -● 5xx = Server error(服务器端错误) - -我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\345\210\230\344\270\234\345\275\252/2024.05.14-REST\347\256\200\344\273\213.md" "b/\345\210\230\344\270\234\345\275\252/2024.05.14-REST\347\256\200\344\273\213.md" deleted file mode 100644 index 32d4866..0000000 --- "a/\345\210\230\344\270\234\345\275\252/2024.05.14-REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,62 +0,0 @@ -## 一、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末尾不应该包含斜线/,不但没有意义还会造成歧义 - diff --git "a/\345\215\240\347\277\212\345\206\233/20240516-\350\256\244\350\257\206webapi.md" "b/\345\215\240\347\277\212\345\206\233/20240516-\350\256\244\350\257\206webapi.md" deleted file mode 100644 index af3e2a7..0000000 --- "a/\345\215\240\347\277\212\345\206\233/20240516-\350\256\244\350\257\206webapi.md" +++ /dev/null @@ -1,36 +0,0 @@ -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` \ No newline at end of file diff --git "a/\345\215\242\345\273\272\347\245\245/20240516-Webapi\346\246\202\345\277\265.md" "b/\345\215\242\345\273\272\347\245\245/20240516-Webapi\346\246\202\345\277\265.md" deleted file mode 100644 index 3b5a1ae..0000000 --- "a/\345\215\242\345\273\272\347\245\245/20240516-Webapi\346\246\202\345\277\265.md" +++ /dev/null @@ -1,23 +0,0 @@ -## Web API 概念笔记 -- Web API 是一种通过网络(通常是 HTTP 协议)提供的应用程序编程接口,允许不同的客户端(如网页、移动应用等)与服务器进行交互和获取数据。 -### 主要特点: -- 基于标准协议:通常使用 HTTP 协议进行通信。 -- 数据交换:以各种格式(如 JSON、XML 等)提供数据。 -- 独立于平台:可以在不同的操作系统和编程语言中使用。 -- 松耦合:客户端和服务器可以独立开发和演化。 -### 好处: -- 促进系统集成:不同的应用程序可以方便地集成。 -- 提高开发效率:重用已有服务,减少重复开发。 -- 增强灵活性:易于扩展和修改服务。 -### 设计要点: -- 明确的接口定义:包括请求方法、参数和响应格式。 -- 错误处理:提供清晰的错误反馈。 -- 安全性:考虑授权、认证等安全措施。 -### 使用场景: -- 构建单页应用:获取数据并动态更新页面。 -- 移动端开发:与后端服务交互。 -- 第三方应用集成:共享数据和功能。 -### 开发注意事项: -- 性能优化:减少不必要的数据传输和处理。 -- 文档完善:提供详细的 API 文档。 -- 通过合理设计和使用 Web API,可以提高应用的可扩展性和互操作性。 \ No newline at end of file diff --git "a/\345\217\262\347\247\200\347\272\242/.keep" "b/\345\217\262\347\247\200\347\272\242/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\345\217\262\347\247\200\347\272\242/2024-05-14-REST\347\256\200\344\273\213.md" "b/\345\217\262\347\247\200\347\272\242/2024-05-14-REST\347\256\200\344\273\213.md" deleted file mode 100644 index 8604ed4..0000000 --- "a/\345\217\262\347\247\200\347\272\242/2024-05-14-REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,60 +0,0 @@ -## 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 - -##### 常见的 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 末尾不应该包含斜线/,不但没有意义还会造成歧义 diff --git "a/\345\217\266\346\235\250/.keep" "b/\345\217\266\346\235\250/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\345\217\266\346\235\250/2024-05-16\345\270\270\350\247\201\347\232\204 Web API \347\261\273\345\236\213.md" "b/\345\217\266\346\235\250/2024-05-16\345\270\270\350\247\201\347\232\204 Web API \347\261\273\345\236\213.md" deleted file mode 100644 index af3e2a7..0000000 --- "a/\345\217\266\346\235\250/2024-05-16\345\270\270\350\247\201\347\232\204 Web API \347\261\273\345\236\213.md" +++ /dev/null @@ -1,36 +0,0 @@ -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` \ No newline at end of file diff --git "a/\345\217\266\346\242\246\347\224\237/20240516-\350\256\244\350\257\206webapi.md" "b/\345\217\266\346\242\246\347\224\237/20240516-\350\256\244\350\257\206webapi.md" deleted file mode 100644 index 84ec103..0000000 --- "a/\345\217\266\346\242\246\347\224\237/20240516-\350\256\244\350\257\206webapi.md" +++ /dev/null @@ -1,36 +0,0 @@ -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` \ No newline at end of file diff --git "a/\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" "b/\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" deleted file mode 100644 index 90f404b..0000000 --- "a/\345\217\266\346\242\246\347\224\237/20240517-http\347\275\221\345\235\200.md" +++ /dev/null @@ -1,75 +0,0 @@ -## protocol -协议(Protocol)是指在通信中约定的规则和规范,用于确保不同系统、设备或应用程序之间可以进行有效的交流和数据传输。 - -在计算机网络中,协议定义了数据在网络中的传输格式、通信过程、错误处理等细节。它规定了通信双方的角色、消息的格式和语义,以及交互的顺序和流程。 - -常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议、SMTP协议等。这些协议提供了不同层次上的功能,如网络连接建立、数据传输、路由选择、安全认证等,以满足各种不同的通信需求。 - -协议的使用可以使得不同的设备和系统能够相互理解并进行有效的通信,促进了互联网的发展和各种应用的实现。 - -## host -在HTTP协议中,"Host"是一个请求头部字段,用于指定要访问的主机名或域名。它告诉服务器应该处理该请求的目标主机。 - -当客户端发送HTTP请求时,会在请求头部中包含"Host"字段,格式如下: - -Host: hostname -其中,"hostname"表示要访问的主机名或域名。 - -使用"Host"字段的主要目的是支持虚拟主机(Virtual Host)功能。虚拟主机允许在同一台物理服务器上托管多个网站,每个网站都有自己的域名。通过在"Host"字段中指定不同的域名,服务器可以根据"Host"字段的值来确定要返回给客户端的具体网站内容。 - -例如,当访问 "http://www.example.com/page.html" 时,请求头部中的"Host"字段可能如下所示: - -Host: www.example.com -这样,服务器就能够根据"Host"字段中的域名来确定返回给客户端的是属于"www.example.com"网站的内容。 - -总结来说,"Host"是HTTP请求头部中的一个字段,用于指定要访问的主机名或域名。它是实现虚拟主机功能的重要组成部分,允许在同一台物理服务器上托管多个网站,并根据"Host"字段的值来确定返回给客户端的具体网站内容。 - -## port -在计算机网络中,端口(Port)用于标识不同的服务或应用程序。它是一个数字,范围从0到65535,被分为三个范围: - -知名端口(Well-known Ports):范围从0到1023,用于常见的网络服务,如HTTP(端口80)、HTTPS(端口443)、FTP(端口21)等。 - -注册端口(Registered Ports):范围从1024到49151,用于已经被注册的一些应用程序或服务。 - -动态/私有端口(Dynamic/Private Ports):范围从49152到65535,用于临时分配给客户端应用程序或服务。 - -当进行网络通信时,需要指定目标主机的IP地址和端口号。端口号用于将数据传输到正确的应用程序或服务。在TCP/IP协议中,端口号是通过16位的无符号整数表示。 - -例如,访问网站时,通常使用HTTP协议,默认的HTTP端口号是80。因此,当输入 "http://www.example.com" 时,实际上等同于 "http://www.example.com:80",其中":80"表示使用HTTP的默认端口。 - -除了默认端口外,有些应用程序可能会使用其他非默认端口。例如,FTP默认使用端口21,但可以通过指定不同的端口来连接到不同的FTP服务器。 - -总结来说,端口是用于标识不同服务或应用程序的数字。它是网络通信中的一部分,通过指定目标主机的IP地址和端口号,确保数据能够传输到正确的应用程序或服务。知名端口范围从0到1023,注册端口范围从1024到49151,动态/私有端口范围从49152到65535。 - -## query -在 HTTP 网址中,查询字符串(query string)是紧跟在 URL 路径之后的一部分,通常以问号 (?) 开头。查询字符串包含用来向 Web 服务器传递参数的键值对,参数之间使用 & 符号分隔。 - -例如,在以下网址中: - -https://www.example.com/search?q=apple&category=fruits - -查询字符串部分为 "?q=apple&category=fruits"。在这个例子中, "q" 是参数名,"apple" 是它的值;"category" 是另一个参数名,"fruits" 是它的值。这个查询字符串告诉服务器要执行一个搜索操作,搜索关键词是 "apple",并限定在 "fruits" 这个类别下。 - -在网络编程或 Web 开发中,解析和处理查询字符串是非常常见的任务。在许多编程语言中,都有现成的工具库可以帮助我们解析查询字符串,提取其中的参数和值。 - -## path -在网址(URL)中,"path" 指的是指定特定网页或资源在服务器上的位置的部分。通常,这个部分包括了服务器的域名后面的第一个斜杠(/)开始的部分。例如,在以下网址中: - -https://www.example.com/products/electronics/laptops - -"/products/electronics/laptops" 就是这个URL的路径部分。这告诉服务器在哪里可以找到所请求的资源。 - -在编程中,你可以使用 URL 解析库来解析 URL,并提取其中的路径部分。在 Python 中,你可以使用 urllib.parse 库来完成这个任务。 - -## fragment -在 HTTP 网址中,片段标识符(fragment identifier)是位于 URL 的末尾,并以井号(#)开头的部分。它用于指定在网页或文档中的特定位置或锚点。 - -例如,在以下网址中: - -https://www.example.com/page.html#section-2 - -"#section-2" 就是这个网址的片段标识符部分。它告诉浏览器在加载页面后,要自动滚动到 ID 为 "section-2" 的元素处。这通常在跳转到页面内部的锚点链接中使用。 - -片段标识符通常用于 Web 页面内部的导航和定位,让用户可以直接跳转到特定的章节、段落、图像或其他元素。浏览器会根据片段标识符进行相应的滚动和定位操作。 - -需要注意的是,片段标识符不会被发送到服务器端,仅在客户端浏览器中处理和使用。因此,服务器不会根据片段标识符来返回不同的内容。它主要用于客户端的交互和导航。 \ No newline at end of file diff --git "a/\345\220\264\350\257\227\350\214\265/20240514-1.API\345\222\214REST.md" "b/\345\220\264\350\257\227\350\214\265/20240514-1.API\345\222\214REST.md" deleted file mode 100644 index fff961c..0000000 --- "a/\345\220\264\350\257\227\350\214\265/20240514-1.API\345\222\214REST.md" +++ /dev/null @@ -1,30 +0,0 @@ -## API和REST - -### API - -Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 - -### REST - -HTTP总共包含八种方法: - -``` -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -``` - -● 2xx = Success(成功) - -● 3xx = Redirect(重定向) - -● 4xx = User error(客户端错误) - -● 5xx = Server error(服务器端错误) - -我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\345\224\220\345\255\235\345\235\232/20240516-\350\256\244\350\257\206webapi.md" "b/\345\224\220\345\255\235\345\235\232/20240516-\350\256\244\350\257\206webapi.md" deleted file mode 100644 index 84ec103..0000000 --- "a/\345\224\220\345\255\235\345\235\232/20240516-\350\256\244\350\257\206webapi.md" +++ /dev/null @@ -1,36 +0,0 @@ -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` \ No newline at end of file diff --git "a/\345\247\232\346\242\246\347\224\267/20240514-webapi\347\256\200\344\273\213.md" "b/\345\247\232\346\242\246\347\224\267/20240514-webapi\347\256\200\344\273\213.md" deleted file mode 100644 index fa6de21..0000000 --- "a/\345\247\232\346\242\246\347\224\267/20240514-webapi\347\256\200\344\273\213.md" +++ /dev/null @@ -1,33 +0,0 @@ -# Web API简介 -Web API(应用程序编程接口)是一种用于在应用程序之间传输数据的协议。Web API允许不同的软件应用通过HTTP协议进行通信,交换数据,从而实现功能上的整合。 -什么是Web API -Web API是一种接口,它定义了客户端可以遵循的一组规则和约定,以便与服务器进行交互。这些交互通常是通过发送请求和接收响应来完成的。 - -# Web API的工作原理 -- 客户端请求:客户端(如Web浏览器、移动应用等)向服务器发送一个HTTP请求。 -- 服务器处理:服务器接收到请求后,根据请求的类型(如GET、POST、PUT、DELETE等)处理请求。 -- 响应返回:服务器处理完毕后,将结果以HTTP响应的形式发送回客户端。 -# Web API的优势 -- 简化开发:开发者可以通过Web API快速集成第三方服务。 -- 数据交换格式:通常使用JSON或XML作为数据交换格式,易于理解和使用。 -- 跨平台:Web API不受平台限制,可以在任何支持HTTP协议的环境中使用。 -# 常见的Web API类型 -- RESTful API:表现层状态转移(Representational State Transfer)是一种设计风格,它定义了客户端和服务器之间的通信方式。 -- SOAP API:简单对象访问协议(Simple Object Access Protocol)是一种协议,用于在Web服务中交换结构化信息。 -- GraphQL API:GraphQL是一个用于API的查询语言,它允许客户端精确地指定所需数据。 -# 如何使用Web API -要使用Web API,你通常需要: - -- 阅读文档:了解API的使用方法和限制。 -- 获取授权:如果API需要认证,你需要获取相应的授权。 -- 发送请求:使用适当的工具或编程语言发送HTTP请求到API的端点。 -- 处理响应:根据服务器返回的响应进行处理。 -示例:使用RESTful API获取数据 -假设我们想要从某个RESTful API获取数据,我们可能会发送一个GET请求到如下URL:https://api.example.com/data - -## 安全性 -Web API的安全性非常重要。常见的安全措施包括: - -- 使用HTTPS:确保所有通信都是加密的。 -- 认证机制:如OAuth、API密钥等,以验证请求的合法性。 -- 限制访问:对API的使用频率和权限进行限制。 \ No newline at end of file diff --git "a/\345\274\240\346\240\207\346\230\237\345\256\211/.keep" "b/\345\274\240\346\240\207\346\230\237\345\256\211/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\345\274\240\346\240\207\346\230\237\345\256\211/20240514-Rest.md" "b/\345\274\240\346\240\207\346\230\237\345\256\211/20240514-Rest.md" deleted file mode 100644 index 48ce418..0000000 --- "a/\345\274\240\346\240\207\346\230\237\345\256\211/20240514-Rest.md" +++ /dev/null @@ -1,57 +0,0 @@ -# 一、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问号后面的参数部分,参数名和参数用=分隔,多个参数用&分隔 - - -##### 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 diff --git "a/\346\235\250\345\217\257\347\233\210/20240514--API\344\270\216REST.md" "b/\346\235\250\345\217\257\347\233\210/20240514--API\344\270\216REST.md" deleted file mode 100644 index 16c82ab..0000000 --- "a/\346\235\250\345\217\257\347\233\210/20240514--API\344\270\216REST.md" +++ /dev/null @@ -1,55 +0,0 @@ -### API -``` -介绍API的概念,Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口。那么它是一个怎样的接口呢,现在我们常将它看成一个HTTP接口即HTTP API。也就是说这个接口得通过HTTP的方式来调用,做过前后端开发的小伙伴可能知道,后端开发又叫做面向接口开发,我们往往会提供一个接口供前端调用,或者供其他服务调用。举个例子,我们程序中往往会涉及到调用第三方接口,比如说,调用支付宝或者微信的支付接口来实现我们程序中的支付功能、调用带三方的短信接口来向用户发送验证码短信等等... - -这样说吧,比如说我们有一个可以允许我们查看(view),创建(create),编辑(edit)以及删除(delete)部件的应用程序。我们可以创建一个可以让我们执行这些功能的HTTP API: - -http://demo.com/view_books -http://demo.com/create_new_book?name=shuxue -http://demo.com/update_book?id=1&name=shuxue -http://demo.com/delete_book?id=1 -这是4个HTTP API,分别实现了图书的查看、新增、编辑、删除的操作,当我们把接口发布出去的时候,别人就可以通过这四个接口来调用相关的服务了。但是这样做有什么不方便的地方呢?你可能发现了,这种API的写法有一个缺点 ,那就是没有一个统一的风格,比如说第一个接口表示查询全部图书的信息,我们也可以写成这样: - -http://demo.com/books/list -那这样就会造成使用我们接口的其他人必须得参考API才能知道它是怎么运作的。 - -不用担心,REST会帮我们解决这个问题。 -``` - -### REST -``` -有了上面的介绍,你可能也大概有了直观的了解,说白了,REST是一种风格! - -REST的作用是将我们上面提到的查看(view),创建(create),编辑(edit)和删除(delete)直接映射到HTTP 中已实现的GET,POST,PUT和DELETE方法。 - -这四种方法是比较常用的,HTTP总共包含八种方法: - -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -当我们在浏览器点点点的时候我们通常只用到了GET方法,当我们提交表单,例如注册用户的时候我们就用到了POST方法... - -介绍到这里,我们重新将上面的四个接口改写成REST风格: - -查看所有图书: - -GET http://demo.com/books -新增一本书: - -POST http://demo.com/books -Data: name=shuxue -修改一本书: - -PUT http://demo.com/books -Data:id=1,name=shuxue -删除一本书: - -DELETE http://demo.com/books -Data:id=1 -这样改动之后API变得统一了,我们只需要改变请求方式就可以完成相关的操作,这样大大简化了我们接口的理解难度,变得易于调用。 -``` \ No newline at end of file diff --git "a/\346\235\250\345\256\201/20240514-rest.md" "b/\346\235\250\345\256\201/20240514-rest.md" deleted file mode 100644 index 3e592dc..0000000 --- "a/\346\235\250\345\256\201/20240514-rest.md" +++ /dev/null @@ -1,98 +0,0 @@ -### 一、API与REST -#### 1.什么是API -- 应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用 -- Web API作为一个Web应用程序,向外提供一些可以对数据进行操作的接口 -- Web API能够实现不同应用程序之间的访问,它与操作平台或编程语言无关,仅仅只是为外部应用程序提供了抽象,而不是在内部实现 -#### 2.什么是REST -##### 1.概念 -- REST是一种软件构架风格,是一种规定了如何发送和接收数据的方式 -- REST的核心理念就是将资源(例如文本、图片、音频等等)以统一的接口进行管理,这些资源可以通过URL进行访问,并使用标准的HTTP方法进行操作 -- REST和HTTP有一定的关系,资源在服务的提供方和请求方之间进行传递,,需要借助协议来约,而HTTP协议完全可以满足REST中所定义的约束 -##### 2.REST约束 -1. 客户端-服务器:体现关注点分离(类似前后端分离),客户端负责用户界面和用户行为,服务器负责数据存储和处理 - - 拓展——微服务:微服务是一种软件架构风格,其中应用程序被构建为一组小型、独立的服务,每个服务专注于执行特定的业务功能。这些服务可以通过轻量级通信机制(如HTTP RESTful API)进行通信,并可以通过自动化工具进行部署 -2. 统一接口:系统中的组件之间的通信必须是通过统一的接口进行的,统一接口约束本身由4个子约束组成: - - 资源的标识:任何能够命名的对象都是一个资源,统一资源标识符通常是一个URL(统一资源定位符)。每个URL代表一个资源或资源集合,访问对于URL就可以对该资源执行操作 - - 通过表述操作资源:当请求一个资源时,服务器会返回该资源的一个表述(表示资源当前的状态),它由表述正文和表述元数据组成,格式通常为JSON、XML和HTML等,所以可以访问指定表述格式的资源,或者访问一个资源的不同格式不需要修改资源的标识符 - - 自描述消息:客户端和服务器之间传递的每一条消息包含了资源表述、资源表述的相关信息(如资源表述的格式、内容长度等)、资源相关的其他操作信息 - - 超媒体作为应用程序状态引擎:客户端可以根据服务端提供的超链接来动态地构建和驱动应用程序的状态转换 -3. 分层系统:要求客户端无法直接访问服务器上的资源,而是通过中间层(如代理服务器或负载均衡器)来间接访问。这意味着客户端和服务器之间存在多个层级,每个层级对于另一个层级来说都是透明的 -4. 缓存:服务器必须标识哪些响应是可缓存的,并在响应中提供缓存控制信息。客户端可以使用缓存来减少对服务器的请求,提高性能和减少网络流量 -5. 无状态:每个请求都必须包含所有必要的信息,服务器不会保存关于客户端状态的任何信息。这使得系统更容易扩展,因为服务器不需要维护每个客户端的状态 -6. 按需编码:服务器可以通过将代码传输到客户端来扩展客户端的功能,但是这应该是可选的,并且由客户端控制 -##### 3.对REST的误区 -1. 只有遵守了REST约束的API才叫【RESTful API】 -2. 除了REST之外,另一种常见的API风格是RPC风格(远程过程调用),用于在不同的计算机之间进行通信和调用远程服务。 -3. REST风格和RPC风格的区别: - - REST面向资源(通常指服务器),PRC面向功能(函数) - - REST的端点是名词、资源、资源集合,PRC的端点是动词、方法名 - - REST对资源执行操作,RPC执行服务器上的方法 - - REST返回请求的资源,RPC返回调用方法的执行结果 - -### 二、HTTP协议 -#### 1.简介 -见以往笔记 -#### 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形式如下所示 -~~~apl -://[: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消息 -是服务器和客户端之间交换数据的方式,有两种类型:请求消息和响应消息。两种消息都包括以下四个部分的内容: -- 起始行:用于描述要执行的请求、对应的状态,包括以下3项 - 1. HTTP方法 - - GET:获取资源,但是是不会修改资源,是安全方法(指不会修改资源),而且是幂等方法(多次调用效果总是一样的) - - POST:创建资源,会修改服务器上的资源,不是安全方法,也不是幂等方法 - - PUT:更新资源,会修图该资源,不是安全方法,却是幂等方法;另外当资源不存在,可以实现创建资源 - - DELETE:删除资源,不是安全方法,却是幂等方法 - - PATCH:对资源进行部分更新(例如部分字段或属性),不是安全方法,也不是幂等方法 - - HEAD:与GRT相同,但是不返回消息正文,通常用于检测资源是否存在以及获取资源的元数据 - - OPTIONS:获取资源支持的操作 - 2. 请求目标:通常是一个URL,表示所要访问的资源 - 3. HTTP版本:目前是HTTP/1.1 -- HTTP消息头:描述请求或响应的相关属性、配置、对消息正文的描述等等,具体见课本P10 -- 空行:指明消息头已经发送完毕 -- 消息正文:包含请求数据或响应中资源的表述,这一部分可以为空 -其中HTTP响应的起始行与请求有些不同,包含以下3项: -1. 协议版本:目前是HTTP/1.1 -2. 状态码:表明请求是否成功,主要分为以下5类:(具体看课本P12) - - 1xx:信息,收到请求,需要请求方继续执行操作 - - 2xx:成功执行请求操作 - - 3xx:重定向,需要进一步操作完成请求 - - 4xx:客户端错误,请求包含语法错误或请求内容不正确 - - 5xx:服务端错误,服务端在处理请求的过程中发生错误 - -### 三、设计资源的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末尾不应该包含斜线/,不但没有意义还会造成歧义 - -### 四、API版本 -当API发生了变化(比如资源表述内容新增或系统添加新资源类型等等),应该使用不同的版本来区别对API的更改,RESTAPI添加版本用以下4种方式: -1. 使用URL路径,比较常用,如localhost:3000/v1/books -2. 使用查询字符串,如/books?version=v1 -3. 使用自定义消息头,如Accept-version:v1 -4. 使用Accept消息头,如Accept:application/json;v=2.0 \ No newline at end of file diff --git "a/\346\236\227\346\230\245\347\277\224/20240514_api.md" "b/\346\236\227\346\230\245\347\277\224/20240514_api.md" deleted file mode 100644 index 82047af..0000000 --- "a/\346\236\227\346\230\245\347\277\224/20240514_api.md" +++ /dev/null @@ -1,57 +0,0 @@ -### API -Web API(Web Application Programming Interface)是一组定义了如何在网络上进行数据交换的规范。它允许不同的软件系统相互通信,通常是通过HTTP协议。 - -API的主要用途 -- 数据交换:允许不同的应用程序共享和交换数据。 -- 服务集成:集成第三方服务,如支付、地图、社交网络等。 -- 自动化:自动化任务,如数据同步、报告生成等。 - -创建一个api -``` - 使用Fetch API调用RESTful API -fetch('httpsapi.example.comdata', { - method 'GET', - headers { - 'Content-Type' 'applicationjson', - 'Authorization' 'Bearer your_token' - } -}) -.then(response = response.json()) -.then(data = console.log(data)) -.catch(error = console.error('Error', error)); -``` - -### REST -REST的作用是将我们上面提到的查看(view),创建(create),编辑(edit)和删除(delete)直接映射到HTTP 中已实现的GET,POST,PUT和DELETE方法。 - -这四种方法是比较常用的,HTTP总共包含八种方法: - -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -当我们在浏览器点点点的时候我们通常只用到了GET方法,当我们提交表单,例如注册用户的时候我们就用到了POST方法... - -介绍到这里,我们重新将上面的四个接口改写成REST风格: -``` -查看所有图书: - -GET httpdemo.combooks -新增一本书: - -POST httpdemo.combooks -Data name=shuxue -修改一本书: - -PUT httpdemo.combooks -Dataid=1,name=shuxue -删除一本书: - -DELETE httpdemo.combooks -Dataid=1 -``` -这样改动之后API变得统一了,我们只需要改变请求方式就可以完成相关的操作,这样大大简化了我们接口的理解难度,变得易于调用。 \ No newline at end of file diff --git "a/\346\236\227\347\216\211\346\225\217/20240516_first.md" "b/\346\236\227\347\216\211\346\225\217/20240516_first.md" deleted file mode 100644 index cde9237..0000000 --- "a/\346\236\227\347\216\211\346\225\217/20240516_first.md" +++ /dev/null @@ -1 +0,0 @@ -# dayOne \ No newline at end of file diff --git "a/\346\236\227\347\243\212/2024-05-14.md" "b/\346\236\227\347\243\212/2024-05-14.md" deleted file mode 100644 index b3bec42..0000000 --- "a/\346\236\227\347\243\212/2024-05-14.md" +++ /dev/null @@ -1,9 +0,0 @@ -JavaScript——一种内置于浏览器的高级脚本语言,你可以用来实现 Web 页面/应用中的功能。 -注意 JavaScript 也可用于其他像 Node 这样的编程环境。但现在你不必考虑这些。 -客户端 API — 内置于浏览器的结构程序,位于 JavaScript 语言顶部,使你可以更容易的实现功能。 -第三方 API — 置于第三方普通的结构程序(例如 Twitter,Facebook),使你可以在自己的 Web 页面中使用那些平台的某些功能( -例如在你的 Web 页面显示最新的 Tweets)。 -JavaScript 库 — 通常是包含具有特定功能的一个或多个 JavaScript 文件,把这些文件关联到你的 Web 页以快速或授权编写常见的功能。 -例如包含 jQuery 和 Mootools -JavaScript 框架 — 从库开始的下一步,JavaScript 框架视图把 HTML、CSS、JavaScript 和其他安装的技术打包在一起, -然后用来从头编写一个完整的 Web 应用。 \ No newline at end of file diff --git "a/\346\236\227\347\243\212/2024-05-16.md" "b/\346\236\227\347\243\212/2024-05-16.md" deleted file mode 100644 index 7f2c8e2..0000000 --- "a/\346\236\227\347\243\212/2024-05-16.md" +++ /dev/null @@ -1,31 +0,0 @@ -什么是 Web API? -API 指的是应用程序编程接口(Application Programming Interface)。 - -Web API 是 Web 的应用程序编程接口。 - -浏览器 API 可以扩展 Web 浏览器的功能。 - -服务器 API 可以扩展 Web 服务器的功能。 - -浏览器 API -所有浏览器都有一组内置的 Web API 来支持复杂的操作,并帮助访问数据。 - -例如,Geolocation API 可以返回浏览器所在位置的坐标。 - -实例 -获取用户所在位置的经纬度: - -const myElement = document.getElementById("demo"); - -function getLocation() { - if (navigator.geolocation) { - navigator.geolocation.getCurrentPosition(showPosition); - } else { - myElement.innerHTML = "Geolocation is not supported by this browser."; - } -} - -function showPosition(position) { - myElement.innerHTML = "Latitude: " + position.coords.latitude + - "
Longitude: " + position.coords.longitude; -} \ No newline at end of file diff --git "a/\346\261\244\345\270\214\351\224\220/20240514-rest\347\256\200\344\273\213.md" "b/\346\261\244\345\270\214\351\224\220/20240514-rest\347\256\200\344\273\213.md" deleted file mode 100644 index 9a5300e..0000000 --- "a/\346\261\244\345\270\214\351\224\220/20240514-rest\347\256\200\344\273\213.md" +++ /dev/null @@ -1,79 +0,0 @@ - 一、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 diff --git "a/\347\216\213\345\256\235sen/20240514-Rest.md" "b/\347\216\213\345\256\235sen/20240514-Rest.md" deleted file mode 100644 index cfeb03d..0000000 --- "a/\347\216\213\345\256\235sen/20240514-Rest.md" +++ /dev/null @@ -1,57 +0,0 @@ -## 一、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问号后面的参数部分,参数名和参数用=分隔,多个参数用&分隔 - - -##### 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 diff --git "a/\347\231\275\345\251\211\345\251\267/20240516\347\256\200\344\273\213.md" "b/\347\231\275\345\251\211\345\251\267/20240516\347\256\200\344\273\213.md" deleted file mode 100644 index b668b81..0000000 --- "a/\347\231\275\345\251\211\345\251\267/20240516\347\256\200\344\273\213.md" +++ /dev/null @@ -1,27 +0,0 @@ -# API与REST -1. API 应用程序接口缩写为API又称为应用编程接口,是软件系统不同组成部分衔接的约定。API是一段应用程序与另一段应用程序相互“交流”的方式(协议)。API是通过网络进行数据检索的一种主要方式,API文档将告知你检索数据的URL列表、查询数据、请求方式以及响应状态,其目的是降低web应用程序开发难度,共享两个应用程序之间的数据(文本、音频、视频、图片等),而屏蔽其内部复杂的实现细节。 -2. REST 表述状态的转移 REST API是一组关于如何构建web应用程序API的架构规则、标准或指导,或者说REST API是是遵循API原则的一种架构风格。REST是专门针对web应用程序而设计的,其目的在于降低开发的复杂度,提高系统的可伸缩性。 -## 条件和原则 -1. 在REST架构中,Web中所有的事物(文本、音频、视频、图片、链接)都可以被同意的抽象为资源 -2. 在REST架构中,没一个资源都有与之对应的唯一资源标识符,当资源的状态发生改变时,资源标识符不会发生改变 -3. 在REST架构中,所有的操作都是无状态的,REST架构遵循CRUD原则,所有的资源都可以通过GET、POST、PUT和DELETE这四种行为完成对应的操作 -4. 可缓存、可选项,在REST架构中需要缓存来有效的处理大批量的请求 -5. 接口一致 - -# 设计资源的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末尾不应该包含斜线/,不但没有意义还会造成歧义 - - -# API版本 - 当API发生了变化(比如资源表述内容新增或系统添加新资源类型等等),应该使用不同的版本来区别对API的更改,RESTAPI添加版本用以下4种方式: -1. 使用URL路径,比较常用,如localhost:3000/v1/books -2. 使用查询字符串,如/books?version=v1 -3. 使用自定义消息头,如Accept-version:v1 -4. 使用Accept消息头,如Accept:application/json;v=2.0 \ No newline at end of file diff --git "a/\347\274\252\346\242\223\344\272\250/20240514-API\345\222\214REST.md" "b/\347\274\252\346\242\223\344\272\250/20240514-API\345\222\214REST.md" deleted file mode 100644 index fff961c..0000000 --- "a/\347\274\252\346\242\223\344\272\250/20240514-API\345\222\214REST.md" +++ /dev/null @@ -1,30 +0,0 @@ -## API和REST - -### API - -Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 - -### REST - -HTTP总共包含八种方法: - -``` -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -``` - -● 2xx = Success(成功) - -● 3xx = Redirect(重定向) - -● 4xx = User error(客户端错误) - -● 5xx = Server error(服务器端错误) - -我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\350\202\226\346\226\207\346\205\247/20240516 rest\347\256\200\344\273\213" "b/\350\202\226\346\226\207\346\205\247/20240516 rest\347\256\200\344\273\213" deleted file mode 100644 index 8743a3c..0000000 --- "a/\350\202\226\346\226\207\346\205\247/20240516 rest\347\256\200\344\273\213" +++ /dev/null @@ -1,64 +0,0 @@ -### 一、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 组成部分 -```js -http://(URL 协议):除 http://外,常见的协议还有 https://(加密)、ftp://(文本传输协议)、mailto://(电子邮件协议)等等 -www.\*\*\*.com(主机名,也可以叫域名) -/user/1(URL 路径):具体指向服务器上的具体资源 -端口号:在主机名后面,以:隔开。HTTP 协议默认使用 80 端口号 -查询字符串:URL 问号后面的参数部分,参数名和参数用=分隔,多个参数用&分隔 -锚部分(片段 Frament):在#后面的内容,用于指明一个资源的特定位置 一个完整的 URL 形式如下所示 -://[:port]/[path][?query][#fragment] - {/* []是可省略部分,<>不可省略 */} -``` -2. URL 和 URI 的区别 -URL 是 URI 的子集,一个 URL 就是一个 URI - -### 3.媒体类型 -1. 概念 -当 HTTP 服务器返回响应时,不但返回资源本身,也会在响应中指明资源的内容类型,就叫做媒体类型。HTTP 依赖于 MIME 标准,媒体类型也叫 MIME 类型。浏览器通过 MIME 类型决定如何处理文档,只有设置正确的 MIME 类型,才会被识别 - -2. 常见的 MIME 类型 -```js -text/plain:纯文本 -text/html:HTML 内容 -image/jpeg/png:表示 JPEG/png 图片 -application/json:表示 JSON 格式的数据 -4.HTTP 消息 -是服务器和客户端之间交换数据的方式,有两种类型:请求消息和响应消息。两种消息都包括以下四个部分的内容: - -起始行:用于描述要执行的请求、对应的状态 -HTTP 方法 -GET:获取资源,但是是不会修改资源,是安全方法(指不会修改资源),而且是幂等方法(多次调用效果总是一样的) -POST:创建资源,会修改服务器上的资源,不是安全方法,也不是幂等方法 -PUT:更新资源,会修图该资源,不是安全方法,却是幂等方法;另外当资源不存在,可以实现创建资源 -DELETE:删除资源,不是安全方法,却是幂等方法 -PATCH:对资源进行部分更新(例如部分字段或属性),不是安全方法,也不是幂等方法 -HEAD:与 GRT 相同,但是不返回消息正文,通常用于检测资源是否存在以及获取资源的元数据 -OPTIONS:获取资源支持的操作 -``` -### 三、设计资源的 URL 注意原则 -``` -使用名词的复数形式表示资源集合,如 localhost:3000/books -使用斜线/表示资源之间的层次关系,如/books/1——表示 Id 为 1 的图书信息 -对资源的增删改查操作名称不能包含在 URL 中 -如果一个操作无法对应到资源的某个操作上,可以适当地在 URL 中包含动词,如:【PUT /books/12/set-admin】 -查询字符串可以对资源进行筛选、搜索或分页查询,如【GET /books?Id=12&pageNumber=2】 -URL 使用小写字母 -避免使用下划线_,用中划线—代替 -URL 末尾不应该包含斜线/,不但没有意义还会造成歧义 -``` \ No newline at end of file diff --git "a/\350\222\262\346\230\214\346\234\210/20240516-\345\210\235\345\247\213webapi.md" "b/\350\222\262\346\230\214\346\234\210/20240516-\345\210\235\345\247\213webapi.md" deleted file mode 100644 index ac90c4e..0000000 --- "a/\350\222\262\346\230\214\346\234\210/20240516-\345\210\235\345\247\213webapi.md" +++ /dev/null @@ -1,37 +0,0 @@ - -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` diff --git "a/\350\242\201\344\271\213\346\201\222/20240514-Webapi\344\273\213\347\273\215.md" "b/\350\242\201\344\271\213\346\201\222/20240514-Webapi\344\273\213\347\273\215.md" deleted file mode 100644 index a646b3c..0000000 --- "a/\350\242\201\344\271\213\346\201\222/20240514-Webapi\344\273\213\347\273\215.md" +++ /dev/null @@ -1,36 +0,0 @@ -# Web API简介 -Web API(应用程序编程接口)是一种用于在应用程序之间传输数据的协议。Web API允许不同的软件应用通过HTTP协议进行通信,交换数据,从而实现功能上的整合。 - -## 什么是Web API -Web API是一种接口,它定义了客户端可以遵循的一组规则和约定,以便与服务器进行交互。这些交互通常是通过发送请求和接收响应来完成的。 - -## Web API的工作原理 -1. **客户端请求**:客户端(如Web浏览器、移动应用等)向服务器发送一个HTTP请求。 -2. **服务器处理**:服务器接收到请求后,根据请求的类型(如GET、POST、PUT、DELETE等)处理请求。 -3. **响应返回**:服务器处理完毕后,将结果以HTTP响应的形式发送回客户端。 - -## Web API的优势 -- **简化开发**:开发者可以通过Web API快速集成第三方服务。 -- **数据交换格式**:通常使用JSON或XML作为数据交换格式,易于理解和使用。 -- **跨平台**:Web API不受平台限制,可以在任何支持HTTP协议的环境中使用。 - -## 常见的Web API类型 -- **RESTful API**:表现层状态转移(Representational State Transfer)是一种设计风格,它定义了客户端和服务器之间的通信方式。 -- **SOAP API**:简单对象访问协议(Simple Object Access Protocol)是一种协议,用于在Web服务中交换结构化信息。 -- **GraphQL API**:GraphQL是一个用于API的查询语言,它允许客户端精确地指定所需数据。 - -## 如何使用Web API -要使用Web API,你通常需要: -1. **阅读文档**:了解API的使用方法和限制。 -2. **获取授权**:如果API需要认证,你需要获取相应的授权。 -3. **发送请求**:使用适当的工具或编程语言发送HTTP请求到API的端点。 -4. **处理响应**:根据服务器返回的响应进行处理。 - -## 示例:使用RESTful API获取数据 -假设我们想要从某个RESTful API获取数据,我们可能会发送一个GET请求到如下URL:`https://api.example.com/data` - -## 安全性 -Web API的安全性非常重要。常见的安全措施包括: -- **使用HTTPS**:确保所有通信都是加密的。 -- **认证机制**:如OAuth、API密钥等,以验证请求的合法性。 -- **限制访问**:对API的使用频率和权限进行限制。 diff --git "a/\350\256\270\346\231\250/20240514-API\345\222\214REST.md" "b/\350\256\270\346\231\250/20240514-API\345\222\214REST.md" deleted file mode 100644 index fff961c..0000000 --- "a/\350\256\270\346\231\250/20240514-API\345\222\214REST.md" +++ /dev/null @@ -1,30 +0,0 @@ -## API和REST - -### API - -Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 - -### REST - -HTTP总共包含八种方法: - -``` -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -``` - -● 2xx = Success(成功) - -● 3xx = Redirect(重定向) - -● 4xx = User error(客户端错误) - -● 5xx = Server error(服务器端错误) - -我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\350\265\226\345\277\227\347\224\237/20240519_Rest.md" "b/\350\265\226\345\277\227\347\224\237/20240519_Rest.md" deleted file mode 100644 index 3e592dc..0000000 --- "a/\350\265\226\345\277\227\347\224\237/20240519_Rest.md" +++ /dev/null @@ -1,98 +0,0 @@ -### 一、API与REST -#### 1.什么是API -- 应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用 -- Web API作为一个Web应用程序,向外提供一些可以对数据进行操作的接口 -- Web API能够实现不同应用程序之间的访问,它与操作平台或编程语言无关,仅仅只是为外部应用程序提供了抽象,而不是在内部实现 -#### 2.什么是REST -##### 1.概念 -- REST是一种软件构架风格,是一种规定了如何发送和接收数据的方式 -- REST的核心理念就是将资源(例如文本、图片、音频等等)以统一的接口进行管理,这些资源可以通过URL进行访问,并使用标准的HTTP方法进行操作 -- REST和HTTP有一定的关系,资源在服务的提供方和请求方之间进行传递,,需要借助协议来约,而HTTP协议完全可以满足REST中所定义的约束 -##### 2.REST约束 -1. 客户端-服务器:体现关注点分离(类似前后端分离),客户端负责用户界面和用户行为,服务器负责数据存储和处理 - - 拓展——微服务:微服务是一种软件架构风格,其中应用程序被构建为一组小型、独立的服务,每个服务专注于执行特定的业务功能。这些服务可以通过轻量级通信机制(如HTTP RESTful API)进行通信,并可以通过自动化工具进行部署 -2. 统一接口:系统中的组件之间的通信必须是通过统一的接口进行的,统一接口约束本身由4个子约束组成: - - 资源的标识:任何能够命名的对象都是一个资源,统一资源标识符通常是一个URL(统一资源定位符)。每个URL代表一个资源或资源集合,访问对于URL就可以对该资源执行操作 - - 通过表述操作资源:当请求一个资源时,服务器会返回该资源的一个表述(表示资源当前的状态),它由表述正文和表述元数据组成,格式通常为JSON、XML和HTML等,所以可以访问指定表述格式的资源,或者访问一个资源的不同格式不需要修改资源的标识符 - - 自描述消息:客户端和服务器之间传递的每一条消息包含了资源表述、资源表述的相关信息(如资源表述的格式、内容长度等)、资源相关的其他操作信息 - - 超媒体作为应用程序状态引擎:客户端可以根据服务端提供的超链接来动态地构建和驱动应用程序的状态转换 -3. 分层系统:要求客户端无法直接访问服务器上的资源,而是通过中间层(如代理服务器或负载均衡器)来间接访问。这意味着客户端和服务器之间存在多个层级,每个层级对于另一个层级来说都是透明的 -4. 缓存:服务器必须标识哪些响应是可缓存的,并在响应中提供缓存控制信息。客户端可以使用缓存来减少对服务器的请求,提高性能和减少网络流量 -5. 无状态:每个请求都必须包含所有必要的信息,服务器不会保存关于客户端状态的任何信息。这使得系统更容易扩展,因为服务器不需要维护每个客户端的状态 -6. 按需编码:服务器可以通过将代码传输到客户端来扩展客户端的功能,但是这应该是可选的,并且由客户端控制 -##### 3.对REST的误区 -1. 只有遵守了REST约束的API才叫【RESTful API】 -2. 除了REST之外,另一种常见的API风格是RPC风格(远程过程调用),用于在不同的计算机之间进行通信和调用远程服务。 -3. REST风格和RPC风格的区别: - - REST面向资源(通常指服务器),PRC面向功能(函数) - - REST的端点是名词、资源、资源集合,PRC的端点是动词、方法名 - - REST对资源执行操作,RPC执行服务器上的方法 - - REST返回请求的资源,RPC返回调用方法的执行结果 - -### 二、HTTP协议 -#### 1.简介 -见以往笔记 -#### 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形式如下所示 -~~~apl -://[: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消息 -是服务器和客户端之间交换数据的方式,有两种类型:请求消息和响应消息。两种消息都包括以下四个部分的内容: -- 起始行:用于描述要执行的请求、对应的状态,包括以下3项 - 1. HTTP方法 - - GET:获取资源,但是是不会修改资源,是安全方法(指不会修改资源),而且是幂等方法(多次调用效果总是一样的) - - POST:创建资源,会修改服务器上的资源,不是安全方法,也不是幂等方法 - - PUT:更新资源,会修图该资源,不是安全方法,却是幂等方法;另外当资源不存在,可以实现创建资源 - - DELETE:删除资源,不是安全方法,却是幂等方法 - - PATCH:对资源进行部分更新(例如部分字段或属性),不是安全方法,也不是幂等方法 - - HEAD:与GRT相同,但是不返回消息正文,通常用于检测资源是否存在以及获取资源的元数据 - - OPTIONS:获取资源支持的操作 - 2. 请求目标:通常是一个URL,表示所要访问的资源 - 3. HTTP版本:目前是HTTP/1.1 -- HTTP消息头:描述请求或响应的相关属性、配置、对消息正文的描述等等,具体见课本P10 -- 空行:指明消息头已经发送完毕 -- 消息正文:包含请求数据或响应中资源的表述,这一部分可以为空 -其中HTTP响应的起始行与请求有些不同,包含以下3项: -1. 协议版本:目前是HTTP/1.1 -2. 状态码:表明请求是否成功,主要分为以下5类:(具体看课本P12) - - 1xx:信息,收到请求,需要请求方继续执行操作 - - 2xx:成功执行请求操作 - - 3xx:重定向,需要进一步操作完成请求 - - 4xx:客户端错误,请求包含语法错误或请求内容不正确 - - 5xx:服务端错误,服务端在处理请求的过程中发生错误 - -### 三、设计资源的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末尾不应该包含斜线/,不但没有意义还会造成歧义 - -### 四、API版本 -当API发生了变化(比如资源表述内容新增或系统添加新资源类型等等),应该使用不同的版本来区别对API的更改,RESTAPI添加版本用以下4种方式: -1. 使用URL路径,比较常用,如localhost:3000/v1/books -2. 使用查询字符串,如/books?version=v1 -3. 使用自定义消息头,如Accept-version:v1 -4. 使用Accept消息头,如Accept:application/json;v=2.0 \ No newline at end of file diff --git "a/\350\265\265\346\254\243/0516.md" "b/\350\265\265\346\254\243/0516.md" deleted file mode 100644 index 34940bb..0000000 --- "a/\350\265\265\346\254\243/0516.md" +++ /dev/null @@ -1,54 +0,0 @@ -* * * - -Web API 概念笔记 -============ - -1\. 定义 ------- - -Web API(Web Application Programming Interface)是一组定义了如何在网络上进行数据交换的规范。它允许不同的软件系统相互通信,通常是通过HTTP协议。 - -2\. 类型 ------- - -* **浏览器API**:内置于浏览器中,如DOM API、Canvas API等,用于增强网页功能和交互性。 -* **服务器API**:部署在服务器上,如RESTful API、SOAP API等,用于提供数据和服务给客户端。 - -3\. 关键特性 --------- - -* **无状态**:每个请求都是独立的,服务器不保存客户端状态。 -* **可缓存**:客户端可以缓存响应以提高性能。 -* **统一接口**:使用标准的HTTP方法(GET, POST, PUT, DELETE等)。 - -4\. 常见用途 --------- - -* **数据交换**:允许应用程序之间共享数据。 -* **服务集成**:集成第三方服务,如支付、地图、社交网络等。 -* **应用扩展**:通过API扩展应用功能,如插件、扩展等。 - -5\. 开发注意事项 ----------- - -* **安全性**:确保API的安全性,如使用OAuth、API密钥等。 -* **文档**:提供详细的API文档,包括请求和响应的示例。 -* **版本控制**:管理API的版本,确保向后兼容性。 - -6\. 示例代码 --------- - - // 使用Fetch API调用RESTful API - fetch('https://api.example.com/data', { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer your_token' - } - }) - .then(response => response.json()) - .then(data => console.log(data)) - .catch(error => console.error('Error:', error)); - - -* * * \ No newline at end of file diff --git "a/\350\277\236\345\242\236\351\222\261/20240514_api.md" "b/\350\277\236\345\242\236\351\222\261/20240514_api.md" deleted file mode 100644 index 3e592dc..0000000 --- "a/\350\277\236\345\242\236\351\222\261/20240514_api.md" +++ /dev/null @@ -1,98 +0,0 @@ -### 一、API与REST -#### 1.什么是API -- 应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用 -- Web API作为一个Web应用程序,向外提供一些可以对数据进行操作的接口 -- Web API能够实现不同应用程序之间的访问,它与操作平台或编程语言无关,仅仅只是为外部应用程序提供了抽象,而不是在内部实现 -#### 2.什么是REST -##### 1.概念 -- REST是一种软件构架风格,是一种规定了如何发送和接收数据的方式 -- REST的核心理念就是将资源(例如文本、图片、音频等等)以统一的接口进行管理,这些资源可以通过URL进行访问,并使用标准的HTTP方法进行操作 -- REST和HTTP有一定的关系,资源在服务的提供方和请求方之间进行传递,,需要借助协议来约,而HTTP协议完全可以满足REST中所定义的约束 -##### 2.REST约束 -1. 客户端-服务器:体现关注点分离(类似前后端分离),客户端负责用户界面和用户行为,服务器负责数据存储和处理 - - 拓展——微服务:微服务是一种软件架构风格,其中应用程序被构建为一组小型、独立的服务,每个服务专注于执行特定的业务功能。这些服务可以通过轻量级通信机制(如HTTP RESTful API)进行通信,并可以通过自动化工具进行部署 -2. 统一接口:系统中的组件之间的通信必须是通过统一的接口进行的,统一接口约束本身由4个子约束组成: - - 资源的标识:任何能够命名的对象都是一个资源,统一资源标识符通常是一个URL(统一资源定位符)。每个URL代表一个资源或资源集合,访问对于URL就可以对该资源执行操作 - - 通过表述操作资源:当请求一个资源时,服务器会返回该资源的一个表述(表示资源当前的状态),它由表述正文和表述元数据组成,格式通常为JSON、XML和HTML等,所以可以访问指定表述格式的资源,或者访问一个资源的不同格式不需要修改资源的标识符 - - 自描述消息:客户端和服务器之间传递的每一条消息包含了资源表述、资源表述的相关信息(如资源表述的格式、内容长度等)、资源相关的其他操作信息 - - 超媒体作为应用程序状态引擎:客户端可以根据服务端提供的超链接来动态地构建和驱动应用程序的状态转换 -3. 分层系统:要求客户端无法直接访问服务器上的资源,而是通过中间层(如代理服务器或负载均衡器)来间接访问。这意味着客户端和服务器之间存在多个层级,每个层级对于另一个层级来说都是透明的 -4. 缓存:服务器必须标识哪些响应是可缓存的,并在响应中提供缓存控制信息。客户端可以使用缓存来减少对服务器的请求,提高性能和减少网络流量 -5. 无状态:每个请求都必须包含所有必要的信息,服务器不会保存关于客户端状态的任何信息。这使得系统更容易扩展,因为服务器不需要维护每个客户端的状态 -6. 按需编码:服务器可以通过将代码传输到客户端来扩展客户端的功能,但是这应该是可选的,并且由客户端控制 -##### 3.对REST的误区 -1. 只有遵守了REST约束的API才叫【RESTful API】 -2. 除了REST之外,另一种常见的API风格是RPC风格(远程过程调用),用于在不同的计算机之间进行通信和调用远程服务。 -3. REST风格和RPC风格的区别: - - REST面向资源(通常指服务器),PRC面向功能(函数) - - REST的端点是名词、资源、资源集合,PRC的端点是动词、方法名 - - REST对资源执行操作,RPC执行服务器上的方法 - - REST返回请求的资源,RPC返回调用方法的执行结果 - -### 二、HTTP协议 -#### 1.简介 -见以往笔记 -#### 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形式如下所示 -~~~apl -://[: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消息 -是服务器和客户端之间交换数据的方式,有两种类型:请求消息和响应消息。两种消息都包括以下四个部分的内容: -- 起始行:用于描述要执行的请求、对应的状态,包括以下3项 - 1. HTTP方法 - - GET:获取资源,但是是不会修改资源,是安全方法(指不会修改资源),而且是幂等方法(多次调用效果总是一样的) - - POST:创建资源,会修改服务器上的资源,不是安全方法,也不是幂等方法 - - PUT:更新资源,会修图该资源,不是安全方法,却是幂等方法;另外当资源不存在,可以实现创建资源 - - DELETE:删除资源,不是安全方法,却是幂等方法 - - PATCH:对资源进行部分更新(例如部分字段或属性),不是安全方法,也不是幂等方法 - - HEAD:与GRT相同,但是不返回消息正文,通常用于检测资源是否存在以及获取资源的元数据 - - OPTIONS:获取资源支持的操作 - 2. 请求目标:通常是一个URL,表示所要访问的资源 - 3. HTTP版本:目前是HTTP/1.1 -- HTTP消息头:描述请求或响应的相关属性、配置、对消息正文的描述等等,具体见课本P10 -- 空行:指明消息头已经发送完毕 -- 消息正文:包含请求数据或响应中资源的表述,这一部分可以为空 -其中HTTP响应的起始行与请求有些不同,包含以下3项: -1. 协议版本:目前是HTTP/1.1 -2. 状态码:表明请求是否成功,主要分为以下5类:(具体看课本P12) - - 1xx:信息,收到请求,需要请求方继续执行操作 - - 2xx:成功执行请求操作 - - 3xx:重定向,需要进一步操作完成请求 - - 4xx:客户端错误,请求包含语法错误或请求内容不正确 - - 5xx:服务端错误,服务端在处理请求的过程中发生错误 - -### 三、设计资源的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末尾不应该包含斜线/,不但没有意义还会造成歧义 - -### 四、API版本 -当API发生了变化(比如资源表述内容新增或系统添加新资源类型等等),应该使用不同的版本来区别对API的更改,RESTAPI添加版本用以下4种方式: -1. 使用URL路径,比较常用,如localhost:3000/v1/books -2. 使用查询字符串,如/books?version=v1 -3. 使用自定义消息头,如Accept-version:v1 -4. 使用Accept消息头,如Accept:application/json;v=2.0 \ No newline at end of file diff --git "a/\351\202\261\346\245\267\346\235\255/20240514 - webapi\347\232\204\346\246\202\345\277\265.md" "b/\351\202\261\346\245\267\346\235\255/20240514 - webapi\347\232\204\346\246\202\345\277\265.md" deleted file mode 100644 index f51ea5c..0000000 --- "a/\351\202\261\346\245\267\346\235\255/20240514 - webapi\347\232\204\346\246\202\345\277\265.md" +++ /dev/null @@ -1,17 +0,0 @@ -# webapi的概念 -Web API(Web Application Programming Interface)是一种用于与 Web 服务器或 Web 服务进行通信的接口。它允许不同的软件系统之间进行数据交换和通信,从而实现各种功能和服务。 - -以下是关于 Web API 的一些知识点: - -1. 类型:Web API 可以分为两种类型:基于 SOAP(Simple Object Access Protocol)的 Web 服务和基于 REST(Representational State Transfer)的 Web 服务。基于 SOAP 的 Web 服务使用 XML 格式进行数据交换,而基于 REST 的 Web 服务则使用 JSON 格式。 - -2. 功能:Web API 可以用于实现各种功能,如数据获取、数据提交、身份验证、文件上传下载等。它可以让不同的应用程序之间进行数据交换和通信,实现信息共享和功能扩展。 - -3. 使用方式:开发人员可以通过 HTTP 请求来调用 Web API 提供的功能。通常,开发人员会使用各种编程语言和框架来调用 Web API,如 JavaScript、Ajax、Fetch API、Vue.js、React 等。 - -4. 安全性:Web API 通常需要进行身份验证和授权才能访问受保护的资源。开发人员可以使用 API 密钥、OAuth 认证等方式来确保 Web API 的安全性。 - -5. 示例:一些常见的 Web API 包括 Google Maps API(用于地图服务)、Twitter API(用于获取推文)、GitHub API(用于访问 GitHub 上的数据)等。 - -总的来说,Web API 是一种用于实现不同软件系统之间数据交换和通信的接口,可以帮助开发人员构建更加强大和灵活的应用程序。 - diff --git "a/\351\202\271\347\246\217\347\247\221/20240514-\345\210\235\350\257\206api.md" "b/\351\202\271\347\246\217\347\247\221/20240514-\345\210\235\350\257\206api.md" deleted file mode 100644 index 19171b9..0000000 --- "a/\351\202\271\347\246\217\347\247\221/20240514-\345\210\235\350\257\206api.md" +++ /dev/null @@ -1,96 +0,0 @@ -## .NET WebAPI -- .NET Web API 是一个用于构建 RESTful 应用的框架,它是 ASP.NET 的一部分,允许开发者创建易于使用的、基于 HTTP 的服务。Web API 允许客户端和服务器之间的交互,支持多种数据格式,如 JSON 和 XML。 - -- 以下是一些关于 .NET Web API 的关键点: - 1. **RESTful Services**: Web API 遵循 REST 架构风格,这意味着它使用标准的 HTTP 方法(GET, POST, PUT, DELETE 等)来与资源进行交互。 - 2. **路由**: Web API 使用路由来定义如何接收和响应请求。路由配置允许你定义 URL 模式和相应的处理方法。 - 3. **控制器**: 控制器是 Web API 中的核心组件,用于处理客户端请求并返回响应。每个控制器可以包含多个动作方法,对应不同的 HTTP 请求。 - 4. **模型**: 模型是用于表示数据的类,它们可以被序列化成 JSON 或 XML 格式,以便客户端使用。 - 5. **数据绑定**: Web API 支持数据绑定,这意味着它可以自动将请求数据(如来自表单或 JSON 的数据)映射到你的模型类。 - 6. **依赖注入**: Web API 支持依赖注入,这使得测试和维护代码变得更加容易。 - 7. **配置**: Web API 可以通过配置来定制其行为,包括设置路由、选择数据格式、配置服务等。 - 8. **安全性**: Web API 支持多种安全机制,如 OAuth、JWT(JSON Web Tokens)等,以保护你的 API。 - 9. **跨域资源共享 (CORS)**: Web API 支持 CORS,允许你控制哪些外部域可以访问你的 API。 - 10. **版本控制**: Web API 允许你为 API 进行版本控制,这对于维护和升级 API 非常重要。 - 11. **测试**: Web API 支持使用单元测试和集成测试来测试你的 API。 - 12. **性能**: Web API 被设计为高性能,支持异步编程模型,可以提高应用程序的响应性和吞吐量。 - -## 一、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 diff --git "a/\351\203\221\345\256\266\347\202\234/.keep" "b/\351\203\221\345\256\266\347\202\234/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\351\203\221\345\256\266\347\202\234/20240516-\350\256\244\350\257\206webapi.md" "b/\351\203\221\345\256\266\347\202\234/20240516-\350\256\244\350\257\206webapi.md" deleted file mode 100644 index 84ec103..0000000 --- "a/\351\203\221\345\256\266\347\202\234/20240516-\350\256\244\350\257\206webapi.md" +++ /dev/null @@ -1,36 +0,0 @@ -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` \ No newline at end of file diff --git "a/\351\203\255\345\205\201\346\226\214/20240516-\345\210\235\345\247\213WebApi.md" "b/\351\203\255\345\205\201\346\226\214/20240516-\345\210\235\345\247\213WebApi.md" deleted file mode 100644 index 4520b61..0000000 --- "a/\351\203\255\345\205\201\346\226\214/20240516-\345\210\235\345\247\213WebApi.md" +++ /dev/null @@ -1,39 +0,0 @@ - -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` - - diff --git "a/\351\222\237\351\270\243\346\235\260/20240514_api.md" "b/\351\222\237\351\270\243\346\235\260/20240514_api.md" deleted file mode 100644 index c7f1dcd..0000000 --- "a/\351\222\237\351\270\243\346\235\260/20240514_api.md" +++ /dev/null @@ -1,55 +0,0 @@ -### API - -Web API(Web Application Programming Interface)是一组定义了如何在网络上进行数据交换的规范。它允许不同的软件系统相互通信,通常是通过HTTP协议。 - -API的主要用途 - -- 数据交换:允许不同的应用程序共享和交换数据。 -- 服务集成:集成第三方服务,如支付、地图、社交网络等。 -- 自动化:自动化任务,如数据同步、报告生成等。 - -创建一个api - -``` - 使用Fetch API调用RESTful API -fetch('httpsapi.example.comdata', { - method 'GET', - headers { - 'Content-Type' 'applicationjson', - 'Authorization' 'Bearer your_token' - } -}) -.then(response = response.json()) -.then(data = console.log(data)) -.catch(error = console.error('Error', error)); -``` - -### REST - -REST的作用是将我们上面提到的查看(view),创建(create),编辑(edit)和删除(delete)直接映射到HTTP 中已实现的GET,POST,PUT和DELETE方法。 - -这四种方法是比较常用的,HTTP总共包含八种方法: - -GET POST PUT DELETE OPTIONS HEAD TRACE CONNECT 当我们在浏览器点点点的时候我们通常只用到了GET方法,当我们提交表单,例如注册用户的时候我们就用到了POST方法... - -介绍到这里,我们重新将上面的四个接口改写成REST风格: - -``` -查看所有图书: - -GET httpdemo.combooks -新增一本书: - -POST httpdemo.combooks -Data name=shuxue -修改一本书: - -PUT httpdemo.combooks -Dataid=1,name=shuxue -删除一本书: - -DELETE httpdemo.combooks -Dataid=1 -``` - -这样改动之后API变得统一了,我们只需要改变请求方式就可以完成相关的操作,这样大大简化了我们接口的理解难度,变得易于调用。 \ No newline at end of file diff --git "a/\351\231\210\344\275\263\344\270\275/20240514.API\344\270\216REST.md" "b/\351\231\210\344\275\263\344\270\275/20240514.API\344\270\216REST.md" deleted file mode 100644 index f878133..0000000 --- "a/\351\231\210\344\275\263\344\270\275/20240514.API\344\270\216REST.md" +++ /dev/null @@ -1,57 +0,0 @@ -### API -Web API(Web Application Programming Interface)是一组定义了如何在网络上进行数据交换的规范。它允许不同的软件系统相互通信,通常是通过HTTP协议。 - -API的主要用途 -- 数据交换:允许不同的应用程序共享和交换数据。 -- 服务集成:集成第三方服务,如支付、地图、社交网络等。 -- 自动化:自动化任务,如数据同步、报告生成等。 - -创建一个api -``` -// 使用Fetch API调用RESTful API -fetch('https://api.example.com/data', { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer your_token' - } -}) -.then(response => response.json()) -.then(data => console.log(data)) -.catch(error => console.error('Error:', error)); -``` - -### REST -REST的作用是将我们上面提到的查看(view),创建(create),编辑(edit)和删除(delete)直接映射到HTTP 中已实现的GET,POST,PUT和DELETE方法。 - -这四种方法是比较常用的,HTTP总共包含八种方法: - -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -当我们在浏览器点点点的时候我们通常只用到了GET方法,当我们提交表单,例如注册用户的时候我们就用到了POST方法... - -介绍到这里,我们重新将上面的四个接口改写成REST风格: -``` -查看所有图书: - -GET http://demo.com/books -新增一本书: - -POST http://demo.com/books -Data: name=shuxue -修改一本书: - -PUT http://demo.com/books -Data:id=1,name=shuxue -删除一本书: - -DELETE http://demo.com/books -Data:id=1 -``` -这样改动之后API变得统一了,我们只需要改变请求方式就可以完成相关的操作,这样大大简化了我们接口的理解难度,变得易于调用。 \ No newline at end of file diff --git "a/\351\231\210\344\277\212\350\261\252/20240516-\345\210\235\345\247\213webapi.md" "b/\351\231\210\344\277\212\350\261\252/20240516-\345\210\235\345\247\213webapi.md" deleted file mode 100644 index ac90c4e..0000000 --- "a/\351\231\210\344\277\212\350\261\252/20240516-\345\210\235\345\247\213webapi.md" +++ /dev/null @@ -1,37 +0,0 @@ - -## 常见的 Web API 类型 - -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` diff --git "a/\351\231\210\345\237\271\346\235\260/20240516-\350\256\244\350\257\206webapi.md" "b/\351\231\210\345\237\271\346\235\260/20240516-\350\256\244\350\257\206webapi.md" deleted file mode 100644 index ea7ba35..0000000 --- "a/\351\231\210\345\237\271\346\235\260/20240516-\350\256\244\350\257\206webapi.md" +++ /dev/null @@ -1,34 +0,0 @@ -### RESTful API - -RESTful API 是一种基于 REST(Representational State Transfer)原则设计的 API。它使用 HTTP 协议的不同方法(GET、POST、PUT、DELETE 等)来执行不同的操作,例如获取数据、创建资源、更新资源或删除资源。RESTful API 使用简单的 URL 结构和状态码,易于理解和实现。 - -### GraphQL API - -GraphQL 是一种查询语言,允许客户端请求指定所需的数据。相比于传统的 RESTful API,GraphQL API 允许客户端精确地指定返回结果的格式和内容,避免了多次请求和返回冗余数据的问题。GraphQL API 的灵活性和效率使其在一些场景下更具优势。 - -## RESTful API 的特点 - -- **基于资源(Resource-based)**:在 RESTful API 中,每个 URL 代表一个资源(Resource),并且通过 HTTP 方法对资源进行操作。资源可以是实体对象(如用户、文章)或集合(如用户列表)。 - -- **使用 HTTP 方法**:RESTful API 使用 HTTP 方法来定义对资源的操作。常用的方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。 - -- **无状态(Stateless)**:RESTful API 是无状态的,每个请求都是独立的,服务器不会保存请求的上下文信息。客户端需要提供所有请求所需的数据和信息。 - -- **使用 JSON 或 XML 进行数据交换**:通常,RESTful API 使用 JSON 或 XML 格式来传输数据。JSON 更为常用,因为它具有更好的可读性和易用性。 - -## RESTful API 的设计原则 - -- 使用合适的 HTTP 方法对资源进行操作,如 GET、POST、PUT、DELETE。 -- 使用简洁明了的 URL 结构,使其易于理解和记忆。 -- 对资源的操作应该是幂等的,即无论执行多少次都不会对资源状态产生影响。 -- 返回合适的状态码(如 200、201、404、500)以表示请求的成功或失败。 - -## RESTful API 的示例 - -假设有一个博客系统,可以使用以下方式设计 RESTful API: - -- 获取所有文章:`GET /api/articles` -- 获取单篇文章:`GET /api/articles/:id` -- 创建文章:`POST /api/articles` -- 更新文章:`PUT /api/articles/:id` -- 删除文章:`DELETE /api/articles/:id` \ No newline at end of file diff --git "a/\351\231\210\345\256\227\344\271\211/2024-05-14-REST\347\256\200\344\273\213.md" "b/\351\231\210\345\256\227\344\271\211/2024-05-14-REST\347\256\200\344\273\213.md" deleted file mode 100644 index 36c84f9..0000000 --- "a/\351\231\210\345\256\227\344\271\211/2024-05-14-REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,79 +0,0 @@ -## 一、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 末尾不应该包含斜线/,不但没有意义还会造成歧义 diff --git "a/\351\231\210\351\270\277\345\246\202/20240514API\344\270\216REST.MD" "b/\351\231\210\351\270\277\345\246\202/20240514API\344\270\216REST.MD" deleted file mode 100644 index f878133..0000000 --- "a/\351\231\210\351\270\277\345\246\202/20240514API\344\270\216REST.MD" +++ /dev/null @@ -1,57 +0,0 @@ -### API -Web API(Web Application Programming Interface)是一组定义了如何在网络上进行数据交换的规范。它允许不同的软件系统相互通信,通常是通过HTTP协议。 - -API的主要用途 -- 数据交换:允许不同的应用程序共享和交换数据。 -- 服务集成:集成第三方服务,如支付、地图、社交网络等。 -- 自动化:自动化任务,如数据同步、报告生成等。 - -创建一个api -``` -// 使用Fetch API调用RESTful API -fetch('https://api.example.com/data', { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer your_token' - } -}) -.then(response => response.json()) -.then(data => console.log(data)) -.catch(error => console.error('Error:', error)); -``` - -### REST -REST的作用是将我们上面提到的查看(view),创建(create),编辑(edit)和删除(delete)直接映射到HTTP 中已实现的GET,POST,PUT和DELETE方法。 - -这四种方法是比较常用的,HTTP总共包含八种方法: - -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -当我们在浏览器点点点的时候我们通常只用到了GET方法,当我们提交表单,例如注册用户的时候我们就用到了POST方法... - -介绍到这里,我们重新将上面的四个接口改写成REST风格: -``` -查看所有图书: - -GET http://demo.com/books -新增一本书: - -POST http://demo.com/books -Data: name=shuxue -修改一本书: - -PUT http://demo.com/books -Data:id=1,name=shuxue -删除一本书: - -DELETE http://demo.com/books -Data:id=1 -``` -这样改动之后API变得统一了,我们只需要改变请求方式就可以完成相关的操作,这样大大简化了我们接口的理解难度,变得易于调用。 \ No newline at end of file diff --git "a/\351\242\234\346\234\235\345\213\207/20240514-Rest\347\256\200\344\273\213.md" "b/\351\242\234\346\234\235\345\213\207/20240514-Rest\347\256\200\344\273\213.md" deleted file mode 100644 index fff961c..0000000 --- "a/\351\242\234\346\234\235\345\213\207/20240514-Rest\347\256\200\344\273\213.md" +++ /dev/null @@ -1,30 +0,0 @@ -## API和REST - -### API - -Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 - -### REST - -HTTP总共包含八种方法: - -``` -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -``` - -● 2xx = Success(成功) - -● 3xx = Redirect(重定向) - -● 4xx = User error(客户端错误) - -● 5xx = Server error(服务器端错误) - -我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\351\253\230\344\277\212\346\235\260/2024.5.16webapi\344\273\213\347\273\215md" "b/\351\253\230\344\277\212\346\235\260/2024.5.16webapi\344\273\213\347\273\215md" deleted file mode 100644 index 6bde8ee..0000000 --- "a/\351\253\230\344\277\212\346\235\260/2024.5.16webapi\344\273\213\347\273\215md" +++ /dev/null @@ -1,53 +0,0 @@ -# Web API - 简介 - -- [JS Cookies](https://www.w3school.com.cn/js/js_cookies.asp) -- [Web Form API](https://www.w3school.com.cn/js/js_validation_api.asp) - -Web API 是开发人员的梦想。 - -- 它可以扩展浏览器的功能 -- 它可以极大简化复杂的功能 -- 它可以为复杂的代码提供简单的语法 - -## 什么是 Web API? - -API 指的是应用程序编程接口(*A*pplication *P*rogramming *I*nterface)。 - -Web API 是 Web 的应用程序编程接口。 - -浏览器 API 可以扩展 Web 浏览器的功能。 - -服务器 API 可以扩展 Web 服务器的功能。 - -## 浏览器 API - -所有浏览器都有一组内置的 Web API 来支持复杂的操作,并帮助访问数据。 - -例如,Geolocation API 可以返回浏览器所在位置的坐标。 - -### 实例 - -获取用户所在位置的经纬度: - -```js -const myElement = document.getElementById("demo"); - -function getLocation() { - if (navigator.geolocation) { - navigator.geolocation.getCurrentPosition(showPosition); - } else { - myElement.innerHTML = "Geolocation is not supported by this browser."; - } -} - -function showPosition(position) { - myElement.innerHTML = "Latitude: " + position.coords.latitude + - "
Longitude: " + position.coords.longitude; -} -``` - -## 第三方 API - -第三方 API 未内置于您的浏览器中。 - -要使用这些 API,您必须从 Web 下载代码。 \ No newline at end of file diff --git "a/\351\255\217\345\255\220\345\215\216/20240514-Rest.md" "b/\351\255\217\345\255\220\345\215\216/20240514-Rest.md" deleted file mode 100644 index cfeb03d..0000000 --- "a/\351\255\217\345\255\220\345\215\216/20240514-Rest.md" +++ /dev/null @@ -1,57 +0,0 @@ -## 一、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问号后面的参数部分,参数名和参数用=分隔,多个参数用&分隔 - - -##### 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 diff --git "a/\351\273\204\345\215\216\351\233\250/2024.05.14-REST\347\256\200\344\273\213.md" "b/\351\273\204\345\215\216\351\233\250/2024.05.14-REST\347\256\200\344\273\213.md" deleted file mode 100644 index 9666683..0000000 --- "a/\351\273\204\345\215\216\351\233\250/2024.05.14-REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,34 +0,0 @@ -#### REST简介 -REST 是一组架构规范,并非协议或标准。API 开发人员可以采用各种方式实现 REST。 - -当客户端通过 RESTful API 发出请求时,它会将资源状态的表示方式传递给请求者或终端。这个信息或表述会通过 HTTP 以下列某种格式传输:JSON(Javascript 对象标记)、HTML、XLT、Python、PHP 或纯文本。JSON 是最常用的编程语言,虽然它的名字寓意“标记 JavaScript 对象”,但它适用于各种语言,并且人和机器都能读。 - -注意事项:如果想发送一个遵循 RESTful 风格的 HTTP 请求,请求头和请求参数也同样很重要,因为里面会包含请求的元数据、授权、统一资源标识符(URI)、缓存、cookie 等重要标识信息。而每个请求头和响应头,都有自己的 HTTP 连接信息和状态码。 - - -#### API和REST -API -Application Programming Interface(应用程序接口)是它的全称。简单的理解就是,API是一个接口 - -REST -HTTP总共包含八种方法: - -``` -GET -POST -PUT -DELETE -OPTIONS -HEAD -TRACE -CONNECT -``` -● 2xx = Success(成功) - -● 3xx = Redirect(重定向) - -● 4xx = User error(客户端错误) - -● 5xx = Server error(服务器端错误) - -我们常见的是200(请求成功)、404(未找到)、401(未授权)、500(服务器错误)... \ No newline at end of file diff --git "a/\351\273\204\345\244\251\344\274\237/20240515-webapi\346\246\202\350\277\260.md" "b/\351\273\204\345\244\251\344\274\237/20240515-webapi\346\246\202\350\277\260.md" deleted file mode 100644 index f7d309f..0000000 --- "a/\351\273\204\345\244\251\344\274\237/20240515-webapi\346\246\202\350\277\260.md" +++ /dev/null @@ -1,41 +0,0 @@ -### API与REST: - -#### 1. 什是API? -- API(Application Programming Interface)是一种软件接口,用于不同组件之间的通信和交互。它定义了如何通过编程语言访问和操作软件或服务的功能。 -- Web API是一种特定类型的API,通过Web服务提供对数据和功能的访问。它使用Web技术(如HTTP)来实现跨网络的通信。 - -#### 2. 什么是REST? -##### 2.1 REST的概念 -- REST(Representational State Transfer)是一种软件架构风格,旨在简化网络应用程序的通信。它基于统一接口的设计原则,将资源以统一的方式进行管理。 -- REST使用URL来标识资源,并使用标准的HTTP方法(GET、POST、PUT、DELETE等)对资源进行操作。 - -##### 2.2 REST的约束 -- **客户端-服务器**:分离用户界面和数据存储,使得客户端和服务器可以独立演化。 -- **统一接口**:使用统一的接口对资源进行操作,包括资源的标识、资源的表述、自描述消息和超媒体作为应用程序状态引擎。 -- **分层系统**:通过分层系统实现客户端与服务器之间的松耦合,提高系统的可伸缩性。 -- **缓存**:服务器必须提供缓存控制信息,以减少网络流量和提高性能。 -- **无状态**:每个请求都包含所有必要的信息,服务器不保存客户端的状态,使系统更易于扩展。 -- **按需编码**:服务器可以通过传输代码到客户端来扩展客户端的功能,但应该是可选的。 - -##### 2.3 REST的误区 -- RESTful API并非只有遵循REST约束的API才能称为RESTful。 -- RPC(Remote Procedure Call)是另一种常见的API风格,与REST有所不同。 - -#### 3. HTTP协议 -- HTTP(Hypertext Transfer Protocol)是用于传输超文本的应用层协议,常用于Web应用程序之间的通信。 -- HTTP消息包括请求消息和响应消息,每个消息都包含起始行、消息头、空行和消息正文。 -- HTTP方法包括GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS等,用于指定对资源的操作。 -- HTTP响应包含状态码,表示请求的执行状态,如1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)和5xx(服务器错误)。 - -#### 4. 设计资源的URL注意原则 -- 使用名词的复数形式表示资源集合,如`/books`。 -- 使用斜线表示资源之间的层次关系,如`/books/1`。 -- 避免在URL中包含增删改查操作名称。 -- 可在URL中包含动词表示操作,如`PUT /books/12/set-admin`。 -- 查询字符串可用于筛选、搜索或分页查询,如`GET /books?Id=12&pageNumber=2`。 -- URL使用小写字母和中划线,避免使用下划线。 -- URL末尾不应包含斜线。 - -#### 5. API版本控制 -- 当API发生变化时,应使用不同版本来区分。 -- 可通过URL路径、查询字符串、自定义消息头或Accept消息头指定API版本。 \ No newline at end of file diff --git "a/\351\273\204\347\216\211\346\235\255/20240514.API\344\270\216REST.md" "b/\351\273\204\347\216\211\346\235\255/20240514.API\344\270\216REST.md" deleted file mode 100644 index f5a49d4..0000000 --- "a/\351\273\204\347\216\211\346\235\255/20240514.API\344\270\216REST.md" +++ /dev/null @@ -1,61 +0,0 @@ -使用Fetch API可以方便地进行RESTful API的调用。 -```javascript -// 发起GET请求获取所有项 -fetch('http://your-api-url/items') - .then(response => response.json()) - .then(data => { - console.log(data); // 处理返回的数据 - }) - .catch(error => { - console.error('Error:', error); // 处理错误 - }); - -// 发起POST请求创建新项 -const newItem = { name: 'New Item' }; -fetch('http://your-api-url/items', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(newItem) -}) - .then(response => response.json()) - .then(data => { - console.log(data); // 处理返回的数据 - }) - .catch(error => { - console.error('Error:', error); // 处理错误 - }); - -// 发起PUT请求更新特定项 -const itemId = 1; -const updatedItem = { name: 'Updated Item' }; -fetch(`http://your-api-url/items/${itemId}`, { - method: 'PUT', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(updatedItem) -}) - .then(response => response.json()) - .then(data => { - console.log(data); // 处理返回的数据 - }) - .catch(error => { - console.error('Error:', error); // 处理错误 - }); - -// 发起DELETE请求删除特定项 -const itemId = 1; -fetch(`http://your-api-url/items/${itemId}`, { - method: 'DELETE' -}) - .then(response => response.json()) - .then(data => { - console.log(data); // 处理返回的数据 - }) - .catch(error => { - console.error('Error:', error); // 处理错误 - }); -``` - diff --git "a/\351\273\204\351\233\252\350\212\263/20240514_REST\347\256\200\344\273\213.md" "b/\351\273\204\351\233\252\350\212\263/20240514_REST\347\256\200\344\273\213.md" deleted file mode 100644 index 3e592dc..0000000 --- "a/\351\273\204\351\233\252\350\212\263/20240514_REST\347\256\200\344\273\213.md" +++ /dev/null @@ -1,98 +0,0 @@ -### 一、API与REST -#### 1.什么是API -- 应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用 -- Web API作为一个Web应用程序,向外提供一些可以对数据进行操作的接口 -- Web API能够实现不同应用程序之间的访问,它与操作平台或编程语言无关,仅仅只是为外部应用程序提供了抽象,而不是在内部实现 -#### 2.什么是REST -##### 1.概念 -- REST是一种软件构架风格,是一种规定了如何发送和接收数据的方式 -- REST的核心理念就是将资源(例如文本、图片、音频等等)以统一的接口进行管理,这些资源可以通过URL进行访问,并使用标准的HTTP方法进行操作 -- REST和HTTP有一定的关系,资源在服务的提供方和请求方之间进行传递,,需要借助协议来约,而HTTP协议完全可以满足REST中所定义的约束 -##### 2.REST约束 -1. 客户端-服务器:体现关注点分离(类似前后端分离),客户端负责用户界面和用户行为,服务器负责数据存储和处理 - - 拓展——微服务:微服务是一种软件架构风格,其中应用程序被构建为一组小型、独立的服务,每个服务专注于执行特定的业务功能。这些服务可以通过轻量级通信机制(如HTTP RESTful API)进行通信,并可以通过自动化工具进行部署 -2. 统一接口:系统中的组件之间的通信必须是通过统一的接口进行的,统一接口约束本身由4个子约束组成: - - 资源的标识:任何能够命名的对象都是一个资源,统一资源标识符通常是一个URL(统一资源定位符)。每个URL代表一个资源或资源集合,访问对于URL就可以对该资源执行操作 - - 通过表述操作资源:当请求一个资源时,服务器会返回该资源的一个表述(表示资源当前的状态),它由表述正文和表述元数据组成,格式通常为JSON、XML和HTML等,所以可以访问指定表述格式的资源,或者访问一个资源的不同格式不需要修改资源的标识符 - - 自描述消息:客户端和服务器之间传递的每一条消息包含了资源表述、资源表述的相关信息(如资源表述的格式、内容长度等)、资源相关的其他操作信息 - - 超媒体作为应用程序状态引擎:客户端可以根据服务端提供的超链接来动态地构建和驱动应用程序的状态转换 -3. 分层系统:要求客户端无法直接访问服务器上的资源,而是通过中间层(如代理服务器或负载均衡器)来间接访问。这意味着客户端和服务器之间存在多个层级,每个层级对于另一个层级来说都是透明的 -4. 缓存:服务器必须标识哪些响应是可缓存的,并在响应中提供缓存控制信息。客户端可以使用缓存来减少对服务器的请求,提高性能和减少网络流量 -5. 无状态:每个请求都必须包含所有必要的信息,服务器不会保存关于客户端状态的任何信息。这使得系统更容易扩展,因为服务器不需要维护每个客户端的状态 -6. 按需编码:服务器可以通过将代码传输到客户端来扩展客户端的功能,但是这应该是可选的,并且由客户端控制 -##### 3.对REST的误区 -1. 只有遵守了REST约束的API才叫【RESTful API】 -2. 除了REST之外,另一种常见的API风格是RPC风格(远程过程调用),用于在不同的计算机之间进行通信和调用远程服务。 -3. REST风格和RPC风格的区别: - - REST面向资源(通常指服务器),PRC面向功能(函数) - - REST的端点是名词、资源、资源集合,PRC的端点是动词、方法名 - - REST对资源执行操作,RPC执行服务器上的方法 - - REST返回请求的资源,RPC返回调用方法的执行结果 - -### 二、HTTP协议 -#### 1.简介 -见以往笔记 -#### 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形式如下所示 -~~~apl -://[: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消息 -是服务器和客户端之间交换数据的方式,有两种类型:请求消息和响应消息。两种消息都包括以下四个部分的内容: -- 起始行:用于描述要执行的请求、对应的状态,包括以下3项 - 1. HTTP方法 - - GET:获取资源,但是是不会修改资源,是安全方法(指不会修改资源),而且是幂等方法(多次调用效果总是一样的) - - POST:创建资源,会修改服务器上的资源,不是安全方法,也不是幂等方法 - - PUT:更新资源,会修图该资源,不是安全方法,却是幂等方法;另外当资源不存在,可以实现创建资源 - - DELETE:删除资源,不是安全方法,却是幂等方法 - - PATCH:对资源进行部分更新(例如部分字段或属性),不是安全方法,也不是幂等方法 - - HEAD:与GRT相同,但是不返回消息正文,通常用于检测资源是否存在以及获取资源的元数据 - - OPTIONS:获取资源支持的操作 - 2. 请求目标:通常是一个URL,表示所要访问的资源 - 3. HTTP版本:目前是HTTP/1.1 -- HTTP消息头:描述请求或响应的相关属性、配置、对消息正文的描述等等,具体见课本P10 -- 空行:指明消息头已经发送完毕 -- 消息正文:包含请求数据或响应中资源的表述,这一部分可以为空 -其中HTTP响应的起始行与请求有些不同,包含以下3项: -1. 协议版本:目前是HTTP/1.1 -2. 状态码:表明请求是否成功,主要分为以下5类:(具体看课本P12) - - 1xx:信息,收到请求,需要请求方继续执行操作 - - 2xx:成功执行请求操作 - - 3xx:重定向,需要进一步操作完成请求 - - 4xx:客户端错误,请求包含语法错误或请求内容不正确 - - 5xx:服务端错误,服务端在处理请求的过程中发生错误 - -### 三、设计资源的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末尾不应该包含斜线/,不但没有意义还会造成歧义 - -### 四、API版本 -当API发生了变化(比如资源表述内容新增或系统添加新资源类型等等),应该使用不同的版本来区别对API的更改,RESTAPI添加版本用以下4种方式: -1. 使用URL路径,比较常用,如localhost:3000/v1/books -2. 使用查询字符串,如/books?version=v1 -3. 使用自定义消息头,如Accept-version:v1 -4. 使用Accept消息头,如Accept:application/json;v=2.0 \ No newline at end of file -- Gitee From 195b18c497036b315bbcfdc2f6dd2da61e8acb36 Mon Sep 17 00:00:00 2001 From: zhao <123> Date: Sun, 26 May 2024 21:19:32 +0800 Subject: [PATCH 6/6] lll --- .../0520Webapilll.md" | 1 - ...60\345\273\272\351\241\271\347\233\256.md" | 17 +++ ...nd\344\270\255\351\227\264\344\273\266.md" | 134 ++++++++++++++++++ ...35\350\265\226\346\263\250\345\205\245.md" | 73 ++++++++++ ...5\350\265\226\346\263\250\345\205\2452.md" | 126 ++++++++++++++++ 5 files changed, 350 insertions(+), 1 deletion(-) delete mode 100644 "\350\256\270\345\205\260\350\216\271/0520Webapilll.md" create mode 100644 "\350\256\270\345\205\260\350\216\271/0520\346\226\260\345\273\272\351\241\271\347\233\256.md" create mode 100644 "\350\256\270\345\205\260\350\216\271/0521\351\241\271\347\233\256\347\232\204\345\210\233\345\273\272and\344\270\255\351\227\264\344\273\266.md" create mode 100644 "\350\256\270\345\205\260\350\216\271/0523\344\276\235\350\265\226\346\263\250\345\205\245.md" create mode 100644 "\350\256\270\345\205\260\350\216\271/0524\344\276\235\350\265\226\346\263\250\345\205\2452.md" diff --git "a/\350\256\270\345\205\260\350\216\271/0520Webapilll.md" "b/\350\256\270\345\205\260\350\216\271/0520Webapilll.md" deleted file mode 100644 index 5ae2b5a..0000000 --- "a/\350\256\270\345\205\260\350\216\271/0520Webapilll.md" +++ /dev/null @@ -1 +0,0 @@ -金石为开 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0520\346\226\260\345\273\272\351\241\271\347\233\256.md" "b/\350\256\270\345\205\260\350\216\271/0520\346\226\260\345\273\272\351\241\271\347\233\256.md" new file mode 100644 index 0000000..6e5bd01 --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0520\346\226\260\345\273\272\351\241\271\347\233\256.md" @@ -0,0 +1,17 @@ +# 创建一个新的webapi项目 + +## 1/.先决条件 + - VScode + - 用于vscode的C# + - .NET 8.0 SDK +## 2/. + 打开终端,输入: + + **创建** + - dotnet new webapi -o/-n 项目名称 + + **打开** + - cd 项目名称 + + **启动** + - dotnet run/dotnet watch --project .\项目名称\ \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0521\351\241\271\347\233\256\347\232\204\345\210\233\345\273\272and\344\270\255\351\227\264\344\273\266.md" "b/\350\256\270\345\205\260\350\216\271/0521\351\241\271\347\233\256\347\232\204\345\210\233\345\273\272and\344\270\255\351\227\264\344\273\266.md" new file mode 100644 index 0000000..71090bd --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0521\351\241\271\347\233\256\347\232\204\345\210\233\345\273\272and\344\270\255\351\227\264\344\273\266.md" @@ -0,0 +1,134 @@ + +### Web API 入门笔记 + +#### XMLHttpRequest + +XMLHttpRequest 是 Web API 中最基本的网络请求方法,用于发送 HTTP 请求并获取服务器响应。 + +**用法**: + + const xhr = new XMLHttpRequest(); + xhr.open('GET', 'https://api.example.com/data'); + xhr.onload = function() { + if (xhr.status === 200) { + console.log(xhr.responseText); + } else { + console.log('Request failed. Status code:', xhr.status); + } + }; + xhr.send(); + + +**使用场景**: 适用于简单的网络请求,但不支持 Promise 和 async/await 语法。 + +#### Fetch API + +Fetch API 是 Web API 中另一种网络请求方法,使用 Promise 和 async/await 语法,更加简单易用。 + +**用法**: +```js + + fetch('https://api.example.com/data') + .then(response => { + if (response.ok) { + return response.text(); + } else { + throw new Error('Request failed. Status code:', response.status); + } + }) + .then(data => { + console.log(data); + }) + .catch(error => { + console.error(error); + }); + ``` + +**使用场景**: 适用于需要使用 Promise 和 async/await 语法的网络请求。 + +#### Web Storage + +Web Storage 是 Web API 中用于在浏览器中存储数据的 API,包括 localStorage 和 sessionStorage。 + +**用法**: +```js + // 存储数据 + localStorage.setItem('name', 'John Doe'); + + // 获取数据 + const name = localStorage.getItem('name'); + + // 删除数据 + localStorage.removeItem('name'); + + // 清空所有数据 + localStorage.clear(); +``` + +**使用场景**: 适用于需要在浏览器中存储少量数据的场景,如保存用户偏好或登录状态。 + +### 中间件入门笔记 + +中间件是一种在 Web 应用中处理请求和响应的函数,用于在请求到达服务器后进行预处理和后处理。下面我将介绍两种常见的中间件:Express 和 Koa。 + +#### Express 中间件 + +Express 是 Node.js 中最常用的 Web 框架,提供了一系列中间件函数来处理请求和响应。 + +**用法**: +```js + const express = require('express'); + const app = express(); + + // 定义中间件函数 + const myMiddleware = (req, res, next) => { + console.log('Log:', req.url); + next(); + }; + + // 使用中间件函数 + app.use(myMiddleware); + + // 定义路由 + app.get('/', (req, res) => { + res.send('Hello World!'); + }); + + // 启动服务器 + app.listen(3000, () => { + console.log('Server listening on port 3000.'); + }); +``` + +**使用场景**: 适用于需要在 Node.js 中快速搭建 Web 应用的场景。 + +#### Koa 中间件 + +Koa 是一个更加轻量级的 Web 框架,也提供了中间件函数来处理请求和响应。 + +**用法**: +```js + const Koa = require('koa'); + const app = new Koa(); + + // 定义中间件函数 + const myMiddleware = async (ctx, next) => { + console.log('Log:', ctx.url); + await next(); + }; + + // 使用中间件函数 + app.use(myMiddleware); + + // 定义路由 + app.use(async ctx => { + ctx.body = 'Hello World!'; + }); + + // 启动服务器 + app.listen(3000, () => { + console.log('Server listening on port 3000.'); + }); + +``` +**使用场景**: 适用于需要在 Node.js 中构建更加高效和可扩展的 Web 应用的场景。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0523\344\276\235\350\265\226\346\263\250\345\205\245.md" "b/\350\256\270\345\205\260\350\216\271/0523\344\276\235\350\265\226\346\263\250\345\205\245.md" new file mode 100644 index 0000000..68d66ee --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0523\344\276\235\350\265\226\346\263\250\345\205\245.md" @@ -0,0 +1,73 @@ + +### 依赖注入的基本概念 + +在依赖注入中,有三个角色: + +* **服务提供者(Service Provider)**: 负责创建和管理对象的实例。 +* **服务接口(Service Interface)**: 定义对象之间的依赖关系,服务提供者需要实现该接口。 +* **服务使用者(Service User)**: 依赖于服务接口,需要在运行时注入服务提供者实例。 + +### 依赖注入的实现方式 + +有三种常见的依赖注入实现方式: + +* **构造函数注入(Constructor Injection)**: 在构造函数中传入服务提供者实例。 + +**用法**: +```js + class MyService { + constructor(myDependency) { + this.myDependency = myDependency; + } + + doSomething() { + // ... + } + } + + const myDependency = new Dependency(); + const myService = new MyService(myDependency); +``` +* **方法注入(Method Injection)**: 在方法中传入服务提供者实例。 + +**用法**: +```js + class MyService { + doSomething(myDependency) { + // ... + } + } + + const myDependency = new Dependency(); + const myService = new MyService(); + myService.doSomething(myDependency); + +``` + +* **属性注入(Property Injection)**: 在属性中传入服务提供者实例。 + +**用法**: +```js + class MyService { + constructor() { + this.myDependency = new Dependency(); + } + + doSomething() { + // ... + } + } + + const myService = new MyService(); +``` + +### 依赖注入的优点 + +* **解耦**: 依赖注入可以将对象之间的依赖关系解耦,使得对象之间的耦合度降低,提高代码的可重用性和可扩展性。 +* **可测试**: 依赖注入可以使对象之间的依赖关系变得可控,使得对象更加易于测试。 +* **可维护**: 依赖注入可以使代码的结构更加清晰,使得代码更加易于维护。 + +### 依赖注入的注意事项 + +* **依赖关系的数量**: 如果对象之间的依赖关系过多,可能会导致代码的复杂性过高,影响可读性和可维护性。 +* **依赖关系的稳定性**: 如果对象之间的依赖关系不稳定,可能会导致代码的变更过于频繁,影响代码的可维护性。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0524\344\276\235\350\265\226\346\263\250\345\205\2452.md" "b/\350\256\270\345\205\260\350\216\271/0524\344\276\235\350\265\226\346\263\250\345\205\2452.md" new file mode 100644 index 0000000..9ea17fe --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0524\344\276\235\350\265\226\346\263\250\345\205\2452.md" @@ -0,0 +1,126 @@ +### 依赖注入的原则 + +在 Web API 中,依赖注入的原则如下: + +* **控制反转**: 将服务提供者和服务使用者的依赖关系反转过来,让服务提供者来负责创建和管理服务实例。 +* **解耦**: 通过依赖注入,可以将服务提供者和服务使用者解耦,使得它们可以独立地变化和测试。 +* **可测试**: 通过依赖注入,可以使得服务实例可以在单元测试中被替换成模拟对象,从而可以更好地测试服务的行为。 + +### 依赖注入的优点 + +在 Web API 中,依赖注入的优点如下: + +* **可维护**: 通过依赖注入,可以使得服务实例可以在不同的环境中被配置和管理,从而更容易地进行维护。 +* **可扩展**: 通过依赖注入,可以使得服务实例可以在不同的环境中被替换成不同的实现,从而更容易地扩展功能。 +* **可测试**: 通过依赖注入,可以使得服务实例可以在单元测试中被替换成模拟对象,从而可以更好地测试服务的行为。 + +### 依赖注入的实现 + +在 Web API 中,可以使用以下方式来实现依赖注入: + +* **自己实现**: 可以自己实现一个简单的依赖注入容器,来管理服务实例的创建和生命周期。 +* **使用第三方框架**: 可以使用第三方的依赖注入框架,例如 ASP.NET Core、Autofac、Ninject、Simple Injector 等,来管理服务实例的创建和生命周期。 + +### 依赖注入的配置 + +在 Web API 中,可以使用以下方式来配置依赖注入: + +* **代码配置**: 在代码中配置服务提供者和服务使用者之间的依赖关系。 + +**示例**: +```js + public void ConfigureServices(IServiceCollection services) + { + services.AddTransient(); + services.AddSingleton(); + } + +``` + +* **XML 配置**: 在 XML 配置文件中配置服务提供者和服务使用者之间的依赖关系。 + +**示例**: +```js + + + + + + +``` + +* **注解配置**: 在类和方法上添加注解,使用注解来配置服务提供者和服务使用者之间的依赖关系。 + +**示例**: +```js + [Service(ServiceLifetime.Transient)] + public class MyService : IMyService + { + // ... + } + + [Service(ServiceLifetime.Singleton)] + public class MyDependency : IMyDependency + { + // ... + } + +``` + +### 依赖注入的生命周期 + +在 Web API 中,可以使用以下生命周期来管理服务实例: + +* **Transient**: 每次请求都会创建一个新的服务实例。 +* **Singleton**: 整个应用程序只会创建一个服务实例。 +* **Scoped**: 每个请求都会创建一个新的服务实例,但是在同一个请求中,服务实例可以被重用。 + +### 依赖注入的使用 + +在 Web API 中,可以使用以下方式来使用依赖注入: + +* **构造函数注入**: 在构造函数中使用 `[Activate]` 注解来注入服务实例。 + +**示例**: +```js + public class MyController : ApiController + { + private readonly IMyService _myService; + + public MyController([Activate] IMyService myService) + { + _myService = myService; + } + + // ... + } +``` + +* **属性注入**: 在属性中使用 `[Activate]` 注解来注入服务实例。 + +**示例**: +```js + public class MyController : ApiController + { + [Activate] + public IMyService MyService { get; set; } + + // ... + } +``` + +* **方法注入**: 在方法中使用参数来注入服务实例。 + +**示例**: +```js + public class MyController : ApiController + { + // ... + + [HttpGet] + public IActionResult Get([Activate] IMyService myService) + { + // ... + } + } +``` -- Gitee