簡體   English   中英

帶有 Postgres 的 Express REST API 的 HTTP 方法

[英]HTTP method for Express REST API with Postgres

我正在使用 Express 和 Postgres 實現 REST APIS。 在端點中,我想首先通過 FK user_id 從表中刪除所有實例,然后插入幾個具有相同 user_id 的新實例。 我想知道在這種情況下我應該使用哪種 http 方法? 目前我使用 POST 但我不知道這是否合適。 似乎使用 PUT 也可以正常工作。

router.post('/myTable', auth, async (req, res) => {
  const client = await pool.connect();
  try {
    await client.query('BEGIN');
    const { records } = req.body;
    await client.query('DELETE FROM my_table WHERE user_id=$1', [req.user_id]);
    for (i in records) {
      await client.query('INSERT INTO my_table (name, user_id) VALUES ($1, $2)',[records[i], req.user_id]);
    }

    await client.query('COMMIT');
    res.send();
    
  } catch (error) {
    console.log(error);
    await client.query('ROLLBACK');
  } finally {
    client.release();
  }
});

PUT用於在您指定的 URI 處創建/替換資源。

因此,如果一個資源存在,它有一個客戶端知道的 URI,並且使用PUT請求替換那里的內容, PUT最有意義。

PUT對於 POST 的一大好處是PUT是冪等的。

因此,如果您將PUT請求發送到/myTable端點,則隱含的意思是您正在替換myTable ,並且同一端點上的后續GET請求將為您提供與您剛剛發送的內容在語義上相似的響應。

如果我的上述任何假設是錯誤的,那么您很可能需要POST ,它更像是一種通用的包羅萬象的方法,用於以較少的限制進行更改。 不利的一面是,我認為給定POST請求的操作不太明顯,而無需檢查/理解主體,並且您也失去了冪等性優勢。

目前我使用 POST 但我不知道這是否合適。

規則#1:如果您不確定,可以使用 POST

POST 在 HTTP 中有許多有用的用途,包括“此操作不值得標准化”的通用目的。


似乎使用 PUT 也可以正常工作。

從某種意義上說,任何方法在源服務器上都“工作正常”。 HTTP 定義了請求語義——消息的含義。 它不限制實現。

但是,通用客戶端將假設您的服務器理解 GET/HEAD/POST/PUT 等,與其他所有 Web 服務器理解它們的方式完全相同。 這是 REST 架構風格的強大功能的重要組成部分——任何符合標准的客戶端都可以與任何符合標准的服務器通信,而且它可以正常工作。 此外,如果我們在它們之間插入任何符合標准的緩存/代理,它會繼續以完全相同的方式工作。

但是,如果您使用204 No Content響應PUT請求,那么通用組件將理解這意味着與任何其他服務器將返回的相同內容。 也就是說,如果您偏離標准導致 財產損失,您的服務器負責。

您可以在此處查看答案以供參考。 他們很好地解釋了。 REST 中的 PUT 與 POST

但是由於兩者都可以達到相同的目的並且僅取決於您的偏好或要求,因此我通常使用 post 來創建資源並將更新資源作為一種實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM