私はnode.jsを初めて使用しており、最初のnode.jsが安いAPIをhapi.jsフレームワークで構築しています。すべてのサービスは基本的にデータベースクエリを実行しています。サービスの例は、このようなものです:あなたは、サービスが呼び出されたときに、見ることができるように安心な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を使用して、同じ「リソース」に対して異なる操作を実行します。これは通常、データベース表です。このアーキテクチャの利点は、1つのURLだけが1つのHTTPメソッドを持ち、1つのタイプの操作しか行わないという私の習慣と比べて何ですか?
私はこの問題が問題ではなく、具体的ではないことを知っています。一部の人々はそれを下投票するかもしれません。しかし、初心者としては、どのような典型的なRestful APIがあるかを知りたいし、APIが「ベストプラクティス」であることを確認したいと思っています。助けてください!
サービスパスにパラメータを追加する必要があるため、すべてのリソース(データベーステーブルの行)に対応するURLがあるようです。たとえば、レコードに対して操作を実行する場合は、URL内のパラメータとして一意のIDを渡す必要があります。これは正しいですか? – zhangjinzhou
@zhangjinzhou - これはRESTfulな方法でしょう。 GET、PUT、またはDELETEの各URIは、固有のリソースを表す必要があります。 – jfriend00
はい、正しいです。これはURLのオプションパラメータとして定義されています。 – Silencer310