REST 및 함수 경로

완료됨

이제 훌륭한 API를 만들었습니다. 많은 작업을 하는 것은 아니지만 어쨌든 만든 것이죠. API를 빌드해본 적 없는 사람이나 그런 말을 할 것입니다.

RESTful API로 마이그레이션

CreateProduct, GetProducts, UpdateProduct 및 DeleteProduct라는 엔드포인트가 있습니다. 그런 식으로 명명된 엔드포인트는 전통적인 API 명명 패턴을 따릅니다. 작업/리소스.

Action/Resource 명명 패턴은 더 작은 API에서는 문제가 없습니다. 그러나 이 시뮬레이션에서 Tailwind Traders는 인터넷 자이언트라는 점을 기억하세요. Products API는 빠르게 규모가 커질 수 있습니다. 예를 들어 “GetProductByIdAndQuantityAndDate”라는 메서드가 있다고 가정해 보겠습니다. 이러한 형식의 메서드 이름은 자세한 정보 표시이지만, 이러한 코드를 사용하는 코드가 복잡해 보일 수 있습니다. 또한 장황한 API 이름을 사용하면 개발자가 프로젝트에서 API를 사용하는 방법을 파악하기 더 어려워집니다.

여러분이 해야 할 일은 이 API를 정리하고 직관적으로 만드는 것입니다. 이를 위해 REST 패턴을 사용합니다.

Azure Functions 경로 및 HTTP 요청 메서드

Azure Functions에서 기본적으로 모든 HTTP 트리거 함수는 GET 및 POST 요청에 응답합니다. 또한 함수에 대한 URL을 "/api" 접두사가 있는 해당 함수의 이름으로 설정합니다. 이동 RESTful 패턴으로 이동하도록 이 두 가지를 모두 구성합니다.

Enterprise 애플리케이션

이 샘플 애플리케이션의 Azure Functions v4 프로그래밍 모델에 있는 API에 대한 HTTP 정의는 ./api/src/index.ts에 있으며 다음 패턴을 따릅니다.

const { app } = require('@azure/functions');

app.http('FunctionName',{
    methods: ['GET', 'POST'], 
    authLevel: 'anonymous', 
    route: 'routeName',
    handler: handlerFunction
});

처리기 함수는 HTTP 트리거 정의와 분리되어 있습니다. 이를 통해 함수를 정의하는 방법에 있어 많은 유연성을 얻을 수 있습니다. 별도의 파일에서 처리기 함수를 정의하고 이를 index.ts 파일로 가져올 수 있습니다. 이 형식을 사용하면 OpenAPI 또는 Swagger 설명서를 유지 관리하거나 생성하기가 더 쉽습니다.

더 작은 애플리케이션

HTTP 메서드를 지정하는 앱의 메서드를 사용하여 처리기 코드를 app 호출에 직접 통합하면 더 작은 애플리케이션을 효과적으로 제공할 수 있습니다. 여전히 처리기 함수를 분리하거나 코드를 통합할 수 있습니다.

HTTP 메서드와 처리기 함수를 지정하려면 app.get 메서드를 사용합니다.

const { app } = require('@azure/functions');

app.get('FunctionName', handlerFunction);

또 다른 대체 형식은 단일 함수가 있는 함수 앱에 이상적이며 HTTP 메서드를 지정하는 앱의 메서드를 사용하여 처리기 코드를 app 호출에 직접 통합하는 것입니다. 예시:

const { app } = require('@azure/functions');

app.get('helloWorld',{
    handler: (request: HttpRequest, context: InvocationContext) => {
        return {
            status: 200,
            body: "Hello World"
        }
    }
}

경로 매개 변수

경로 매개 변수를 사용하여 매개 변수를 허용하는 경로를 정의할 수도 있습니다. 예를 들어, 다음 코드는 name 매개 변수를 허용하는 경로를 정의합니다.

route: "products"

전체 경로 정의는 다음과 같습니다.

app.http('GetProducts', {
    methods: ['GET', 'POST'],
    route: 'products',          // <- route: /api/products
    authLevel: 'anonymous',
    handler: GetProducts
});

경로를 지정하면 URL의 api 섹션 뒤에 오는 모든 항목이 변경됩니다. 이전 구성 파일에서 GetProducts 함수에 대한 경로는 이제 http://localhost:7071/api/products입니다.

경로와 함께 매개 변수를 전달할 수 있습니다. 매개 변수는 {parameterName} 형식을 사용합니다. 즉, id라는 매개 변수를 product 엔드포인트에 전달하려면 다음 경로를 지정해야 합니다.

route: "products/{id}"

REST에 대한 새로운 지식과 Azure Functions에서 REST를 구현하는 방법에 대한 정보로 이제 까다로운 해당 Products API를 RESTful로 만들 수 있습니다. 바로 다음 연습에서 수행할 작업입니다.