跳到主要内容

📄 HTTP Methods

1. What is the RESTful API ?

撰写 RESTful API 采用一套标准化的设计风格,便于网络上不同系统之间的进行通信,为了遵循 REST 原则,API 应该要是可预测且容易理解。而身为前端开发者,较为侧重关注以下三点:

  • URL 路径(url path):确认 client 端请求的范围,例如:
    • /products : 可能返回产品列表
    • /products/abc:提供产品 ID 为 abc 的产品细节
  • HTTP 方法:定义具体的执行方式:
    • GET:用于取得数据
    • POST:用于创建新数据
    • PUT: 用于更新现有数据
    • DELETE:用于删除数据
  • 状态码(status code):提供了关于请求是否成功,以及如果不成功,问题可能出在哪里的快速指示。常见状态码包括:
    • 200:成功
    • 404:找不到请求的资源
    • 500:服务器错误

2. If GET can also carry data in a request, why should we use POST?

既然 GET 也能传送包含数据的请求,为什么我们还需要使用 POST 呢?

主要基于这四点考量:

  1. 安全性:因为 GET 的数据是附加在 URL 上面,自然也就容易曝露敏感数据,而 POST 则是将数据放在请求的 body 中,相对更为安全。
  2. 数据大小限制:使用 GET 由于浏览器和服务器对 URL 长度有限制(虽然每个浏览器略有不同,但大体落在 2048 bytes 上下浮动),因此数据量会受到限制。POST 虽然名义上没有限制,但实务上为了避免被恶意攻击灌入大量数据,通常还是会通过一些中间件的设置来限制数据大小。譬如 expressbody-parser
  3. 语义清晰:确保开发者能够清楚的知道这个请求的目的,GET 通常用于获取数据,而 POST 则更适合用于新增或更新数据。
  4. 不可变性(Immutability):在 HTTP 协议中,GET 方法被设计为"安全的",不管发出几次请求,都不必担心这会对 server 上的数据造成变动。

3. What does the PUT method do in HTTP?

PUT 方法的用途是什么?

主要是两个用途:

  1. 更新一个已经存在的数据(例如,修改用户信息)
  2. 如果数据不存在,则新增一个数据

Example

const axios = require('axios');

async function updateUser(userId, newName) {
const url = `https://api.example.com/users/${userId}`; // api URL
const data = {
name: newName,
};

try {
const response = await axios.put(url, data); // 执行 PUT 请求
console.log('User updated:', response.data); // 输出更新后的用户信息
} catch (error) {
console.log('Error updating user:', error); // 输出错误信息
}
}

updateUser(1, 'Pitt Wu');