저는 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을 사용합니다. 제 생각에는 대개 데이터베이스 테이블입니다. 하나의 URL에 하나의 HTTP 메소드 만 있고 하나의 유형의 조작 만 수행하는 것과 비교하면이 아키텍처의 이점은 무엇입니까?
이 질문은 문제를 언급하지 않으며 구체적이지 않습니다. 어떤 사람들은 투표를하지 않을 수 있습니다. 그러나 초보자로서 나는 전형적인 Restful API가 무엇인지 알고 정말로 API가 "best practice"인지 확인하고 싶습니다. 도와주세요!
서비스 경로에 매개 변수를 추가해야하므로 모든 리소스 (데이터베이스 테이블의 행)에 해당 URL이 있어야합니다. 예를 들어 레코드에 대한 작업을 수행하려면 고유 ID를 url의 매개 변수로 전달해야합니다. 이게 옳은 거니? – zhangjinzhou
@zhangjinzhou - 그게 RESTful 방법이 될 것입니다. GET, PUT 또는 DELETE의 각 URI는 고유 한 자원을 나타내야합니다. – jfriend00
네 맞습니다. 그리고 그것은 URL의 선택적 매개 변수로 정의됩니다. – Silencer310