연습 - Azure Functions 앱을 위한 함수 생성
이 단원에서는 Node.js Express 앱의 GET
, POST
, PUT
및 DELETE
엔드포인트를 대상으로, Azure Functions 앱에서 함수를 만들고 구성합니다.
GET 함수에 데이터 액세스 추가
마지막 단원에서 Azure Functions 앱을 만들 때 첫 번째 API 엔드포인트를 만들었습니다. 이 함수는 HTTP GET
이 /vacations
에서 요청되면 실행됩니다. 휴가를 가져오기 위해 데이터 서비스를 호출하도록 상용구 코드를 업데이트해야 합니다.
functions/src/functions/getVacations.ts 파일을 엽니다.
두 파일을 나란히 볼 수 있도록 별도의 창에서 서버/경로/vacation.routes.ts 파일을 엽니다.
getVacations.ts vacationService import 문을 추가합니다.
import { vacationService } from '../services';
getVacations.ts 함수를
getVacations
편집하여 vacationService를 호출합니다.export async function getVacations(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); return { jsonBody: vacationService.getVacations() }; // Data access logic within the return object };
거기서 멈출 수 있습니다. 휴가를 가져오기 위해 함수에 추가해야 하는 유일한 코드입니다. 그러나 오류를 처리하고 상태 코드를 반환하는 코드도 제공해야 합니다. 다음 코드를 사용하도록 함수를 업데이트합니다.
export async function getVacations(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); try { const vacations = vacationService.getVacations(); // Data access logic if (vacations) { return { status: 200, jsonBody: vacations }; } else { return { status: 404, jsonBody: { error: 'No vacations found' } }; } } catch (error: unknown) { const err = error as Error; context.error(`Error listing vacations: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to list vacations' } }; } };
Azure Functions 경로 구성
v4 프로그래밍 모델에서는 여러 가지 방법으로 경로를 구성할 수 있습니다. 경로 정의는 경로 처리기를 단일 파일에 그대로 둘 수 있습니다. 하나의 엔드포인트가 있는 애플리케이션에 적합합니다. Tailwind Traders의 개발자는 이 애플리케이션이 구성해야 하는 많은 API로 확장될 것임을 알고 있습니다.
해당 조직을 시작하려면 경로 정의를 캡처하는 새
./functions/src/index.ts
파일을 만듭니다.패키지에서 제공하는 앱에 대한 종속성을 추가합니다
@azure/functions
.import { app } from '@azure/functions';
파일에서
./functions/getVacations
getVacations 함수에 대한 종속성을 추가합니다.import { getVacations } from `./functions/getVacations`;
경로 정의를
./functions/getVacations
index.ts 파일로 이동합니다. 메서드 속성 배열을 .로 업데이트합니다GET
.app.http('getVacations', { methods: ['GET'], route: 'vacations', authLevel: 'anonymous', handler: getVacations });
함수 및 처리기 이름 지정
이름은 getVacations
app.http에 대한 첫 번째 매개 변수와 두 번째 매개 변수의 속성으로 사용됩니다. 이는 혼란스러울 수 있으며 이름 사용 방법에 따라 조직이나 팀에서 다른 명명 규칙을 원할 수 있습니다.
- 첫 번째 매개 변수 - 문자열로 이름: 첫 번째 매개 변수의 값은 Azure Portal에 표시될 함수의 이름입니다. 이러한 이름은 포털에 영숫자로 나열되므로 유사한 함수를 목적에 따라 그룹화하거나 메서드(예
getVacation
:vacationGet
메서드)로 그룹화하는 명명 규칙을 사용할 수 있습니다. snake_case, 케밥 케이스 또는 camelCase와 같은 다른 사례를 선택할 수도 있습니다. - 두 번째 매개 변수 - 처리기 함수: 두 번째 매개 변수의 값은 코드에서 가져오고 사용될 때 함수 처리기의 이름입니다. 이 이름은 설명적이어야 하며 함수의 목적과 일치해야 합니다. 코드 베이스의 함수에 대해 이미 가지고 있는 명명 규칙을 준수할 수 있으며 일반적인 코드 규칙 도구를 사용하여 적용할 수 있습니다.
나머지 함수 만들기
Node.js Express 애플리케이션에는 네 개의 엔드포인트가 있으며, 방금 만든 것은 GET
엔드포인트용 함수입니다. 지금부터는 나머지 경로 엔드포인트에 대한 함수를 만듭니다.
메서드 | HTTP 트리거 이름 | 경로 |
---|---|---|
POST |
postVacation |
vacations |
PUT |
updateVacation |
vacations/{id} |
DELETE |
deleteVacation |
vacations/{id} |
GET 및 POST 경로는 동일하지만 및 DELETE
경로는 PUT
매개 변수를 사용하여 사용할 휴가를 식별합니다.
HTTP POST 함수 만들기
휴가 추가를 처리하는 POST
함수를 만듭니다.
Visual Studio Code에서 Ctrl Shift +P를 사용하여 명령 팔레트를 + 열고 Enter
Azure Functions: Create Function
키를 누릅니다.HTTP 트리거를 형식으로 선택하고 postVacation을 이름으로 선택합니다.
파일에 vacationService import 문을 추가합니다.
import { vacationService } from '../services';
상용구
postVacation
함수를 데이터 액세스 및 오류 처리를 위한 다음 코드로 바꿉다.export async function postVacation(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`HTTP function processed request for URL: "${request.url}"`); try { const vacation = await request.json() as Vacation; // Validate the vacation object if (!vacation || typeof vacation !== 'object' || !vacation.name || !vacation.description) { return { status: 400, jsonBody: { error: 'Invalid or missing vacation data.' } }; } // Data access logic const newVacation = vacationService.addVacation(vacation); // Successfully added the vacation return { status: 201, jsonBody: newVacation }; } catch (error: unknown) { const err = error as Error; context.error(`Error create vacation: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to create vacation' } }; } }
들어오는 휴가 데이터를 읽으려면 이 메서드를
request.json()
사용합니다. 이 메서드는 요청 본문의 JSON 데이터로 확인되는 프라미스를 반환합니다. 그런 다음 키워드(keyword) 사용하여await
약속이 해결될 때까지 기다립니다. 구문은as Vacation
TypeScript에 결과를 개체로 처리하도록 지시하는 형식 어설션입니다Vacation
.const vacation = await request.json() as Vacation;
postVacation 파일에서 index.ts 파일로 경로 정의를 이동합니다. 메서드 속성 배열을 .로 업데이트합니다
POST
.app.http('post-vacation', { methods: ['POST'], route: 'vacations', authLevel: 'anonymous', handler: postVacation });
HTTP PUT 함수 만들기
휴가 추가를 처리하는 PUT
함수를 만듭니다.
Visual Studio Code에서 Ctrl Shift + P를 사용하여 명령 팔레트를 + 열고 Enter
Azure Functions: Create Function
키를 누릅니다.형식으로 HTTP 트리거를 선택하고 이름으로 updateVacation을 선택합니다.
파일에 vacationService import 문을 추가합니다.
import { vacationService } from '../services';
상용구
updateVacation
함수를 데이터 액세스 및 오류 처리를 위한 다음 코드로 바꿉다.export async function updateVacation(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { try { const id = request.params.id; const { name, description } = await request.json() as Vacation; // Data access logic const updatedVacation = vacationService.updateVacation({ id, name, description }); if (updatedVacation !== undefined) { return { status: 200, jsonBody: { updatedVacation } }; } else { return { status: 404, jsonBody: { error: `Vacation with ID ${id} not found` } }; } } catch (error: unknown) { const err = error as Error; context.error(`Error updating vacation: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to update vacation' } }; } };
이
request.params.id
속성은 URL에서 휴가 ID를 가져오는 데 사용됩니다. 이request.json()
메서드는 요청 본문에서 휴가 데이터를 가져오는 데 사용됩니다. 구문은as Vacation
TypeScript에 결과를 개체로 처리하도록 지시하는 형식 어설션입니다Vacation
.putVacation 파일에서 index.ts 파일로 경로 정의를 이동합니다. 메서드 속성 배열을 .로 업데이트합니다
PUT
.app.http('updateVacation', { methods: ['PUT'], route: 'vacations/{id}', authLevel: 'anonymous', handler: updateVacation });
HTTP DELETE 함수 만들기
휴가 추가를 처리하는 DELETE
함수를 만듭니다.
Visual Studio Code에서 Ctrl Shift + P를 사용하여 명령 팔레트를 + 열고 Enter
Azure Functions: Create Function
키를 누릅니다.형식으로 HTTP 트리거를 선택하고 이름으로 deleteVacation을 선택합니다.
파일에 vacationService 가져오기를 추가합니다.
import { vacationService } from '../services';
상용구
deleteVacation
함수를 데이터 액세스 및 오류 처리를 위한 다음 코드로 바꿉다.export async function deleteVacation(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); try { const id = request.params.id; if (!id) { return { status: 400, jsonBody: { error: 'ID parameter is required' } }; } const deletedVacation = vacationService.deleteVacation(id); if (deletedVacation) { return { status: 204, jsonBody: { deleteVacation } }; } else { return { status: 404, jsonBody: { error: `Vacation with ID ${id} not found` } }; } } catch (error: unknown) { const err = error as Error; context.error(`Error deleting vacation: ${err.message}`); return { status: 500, jsonBody: { error: 'Failed to delete vacation' } }; } };
이
request.params.id
속성은 URL에서 휴가 ID를 가져오는 데 사용됩니다.deleteVacation 파일에서 index.ts 파일로 경로 정의를 이동합니다. 메서드 속성 배열을 .로 업데이트합니다
DELETE
.app.http('deleteVacation', { methods: ['DELETE'], route: 'vacations/{id}', authLevel: 'anonymous', handler: deleteVacation });
다음 단원으로 이동하여, 앞에서 만든 Azure Functions 애플리케이션을 검토합니다.