我是node.js的新手,並在hapi.js框架中創建了我的第一個node.js Restful API。所有的服務基本上都在做數據庫查詢。該服務的一個例子是這樣的:構建Restful API時選擇哪種HTTP方法
let myservice = {
method: "POST",
path: "/updateRule",
config: {
handler: (request, reply) => {
updateRule(request.payload)
.then((result) => {
reply(successResponse(request, result));
})
.catch((err) => reply(failResponse(request, err)).code(500));
},
validate: {
payload: {
ruleId: joi.number().required(),
ruleName: joi.string().required(),
ruleDesc: joi.string().required()
}
},
auth: "jwt",
tags: ["api", "a3i"]
},
}
updateRule(input): Promise<any> {
return new Promise((resolve, reject) => {
let query = `select a3i.update_rule(p_rul_id := ${input.ruleId}, p_rul_name := '${input.ruleName}', p_rul_desc := '${input.ruleDesc}')`;
postgresQuery(lbPostgres, query, (data, commit, rollback) => {
try {
let count = data.rows[0].update_rule.count;
if (count === 1) {
let ruleId = data.rows[0].update_rule.result[0];
let payload: SuccessPayload = {
type: "string",
content: `Rule ${ruleId} has been updated`
};
commit();
resolve(payload);
} else {
let thisErr = new Error("No rule can be found.");
thisErr.name = "4003";
throw thisErr;
}
}
catch (err) {
rollback();
if (err.name === "4003") {
reject(detailError(4003, err.message));
} else {
reject(detailError(4001, err.message));
}
}
}, reject);
});
}
正如你所看到的,當服務被調用時,它喚起數據庫調用(查詢)和更新指定行中的數據庫表。同樣,我還有其他名爲createRule/deleteRule的服務在數據庫表中創建/刪除記錄。 在我看來,服務之間的區別是做不同的數據庫查詢。我看了這篇文章PUT vs. POST in REST,但在我的情況下看不到任何POST和PUT的區別。
這裏是我的問題:
我應該在這種情況下使用什麼HTTP方法?
大部分寧靜的API的例子(例如https://www.codementor.io/olatundegaruba/nodejs-restful-apis-in-10-minutes-q0sgsfhbd)使用不同的HTTP方法相同的URL上相同的「資源」,這在我看來是通常一個數據庫表做不同的操作。與我的慣例相比,這種體系結構的好處是什麼?其中一個URL只有一個HTTP方法,只能執行一種類型的操作?
我知道這個問題沒有提到問題,也沒有具體說明。有些人可能會給它一個倒票。但作爲初學者,我真的很想知道什麼是典型的Restful API,並確保我的API是「最佳實踐」。請幫忙!
看來我不得不向服務路徑添加一個參數,因此每個資源(數據庫表中的一行)都有相應的url。例如,當我想要對記錄執行操作時,我需要將唯一ID作爲url中的參數傳遞。這是正確的嗎? – zhangjinzhou
@ zhangjinzhou - 這將是RESTful的方式。 GET,PUT或DELETE的每個URI應代表一個唯一的資源。 – jfriend00
是的,這是正確的。這被定義爲URL中的可選參數。 – Silencer310