API 개발
API๋ Lino ์๋น์ค์ HTTP ๊ฒฝ๊ณ์ ๋๋ค. ์ ์ก ๋ฌธ์ ๋ฅผ ๋๋ฉ์ธ ๊ท์น๊ณผ ํผํฉํ์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์ด ์ฅ์์๋ Lino๊ฐ Minimal APIs, request/response contracts, typed clients, OpenAPI ๋ฉํ๋ฐ์ดํฐ ๋ฐ Source Generators์ ์ํ endpoint ์๋ ๋ฑ๋ก์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์์ฑ๋ endpoint๋ ์ํธํ ์ํ๋ก ์ ์ง๋์ด์ผ ํฉ๋๋ค. HTTP ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ , ๋ช
๋ น ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์กฐํฉํ๊ณ , ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ผ๋ก ๋ณด๋
๋๋ค. ISender ๊ฒฐ๊ณผ๋ฅผ typed responses์ผ๋ก ๋ณํํฉ๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ, ๋น์ฆ๋์ค ๊ท์น, ์ง์์ฑ, ํธ๋์ญ์
๋ฐ ๋๋ฉ์ธ ๊ถํ ๋ถ์ฌ๋ ๋ช
๋ น, ์ฟผ๋ฆฌ, ์ฒ๋ฆฌ๊ธฐ, ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ, ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฐ ์์
๋จ์์์ ๊ณ์๋ฉ๋๋ค.
Lino์ Minimal APIs
Lino๋ ASP.NET ์ฝ์ด๋ฅผ ์ฑํํฉ๋๋ค. Minimal APIs Clean Architecture์ ๊ฒฝ๊ณ๋ฅผ ๊นจ์ง ์์ผ๋ฉด์ ์ฝ๋๋ฅผ ์ง์ ์ ์ด๊ณ ๋ช ์์ ์ด๋ฉฐ ์ฑ๋ฅ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ endpoint ์์ฑ์ ์ํ ํ์ค์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ฌ Lino ํ๋ก์ ํธ์์ ์์ฑ๋ endpoint๋ ๊ตฌํํ๋ Minimal APIs ํด๋์ค์
๋๋ค. IEndpoint. ๊ฐ endpoint๋ ์ ์ ๋ฉ์๋๋ฅผ ๋
ธ์ถํฉ๋๋ค. MapEndpoint(IEndpointRouteBuilder app) ๊ทธ๋ฆฌ๊ณ ๋ค์์ ์ฌ์ฉํ๋ ํธ๋ค๋ฌ ๋ฉ์๋ ISender ์์ฑ๋ ๋ช
๋ น์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์์ฑ๋ ์ฃผ์ ๋ถํ
*Endpoint.cs: ๋งคํ ๋ฐฉ๋ฒ HTTP, ๊ฒฝ๋ก, ๋ฉํ๋ฐ์ดํฐ, ๊ถํ ๋ถ์ฌ, ํ ๋ํธ ์๊ตฌ ์ฌํญ, ์๋ ์ ํ ๋ฐ ๋ฒ์ .*Request.cs: ๋ณธ๋ฌธ, ์ฟผ๋ฆฌ ๋ฌธ์์ด, ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์ ๋๋ ์์ ๋ฐ์ดํฐ์์ ๋์ค๋ ์ ๋ ฅ์ ๋ํ๋ ๋๋ค.*Extensions.cs: ์์ฒญ์ ๋ช ๋ น/์ฟผ๋ฆฌ๋ก ๋ณํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์๋ต HTTP๋ก ๋ณํํฉ๋๋ค.*Response.cs: ๋์ ๊ณผ ํ์ํ๋ ํด๋ผ์ด์ธํธ์์ ๋ฐํ๋ ๊ฐ๋ ฅํ ํ์์ contracts์ ์ ์ํฉ๋๋ค.
๋ด์ฅ๋ ๊ธฐ๋ฅ
Lino๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค. TypedResults ๊ทธ๋ฆฌ๊ณ Results<...> ์ฑ๊ณต ๋ฐ ์ค๋ฅ ์๋ต์ด ์ฝ๋์ ๋ช
์์ ์ผ๋ก ํ์๋๊ณ OpenAPI์ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋ฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ๊ณ์ธต์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ ๋ค์์ผ๋ก ๋ณํ๋ฉ๋๋ค. ProblemDetails ๋๋ค result.MapToProblemDetails().
WithTags: OpenAPI ๋ฐ Scalar์ ๋ชจ๋, ์ํฐํฐ ๋๋ ๊ธฐ๋ฅ๋ณ๋ก endpoint๋ฅผ ๊ทธ๋ฃนํํฉ๋๋ค.WithName: ํด๋นํ๋ ๊ฒฝ์ฐ ์ผ๊ด๋ OperationId๋ฅผ ์ค์ ํฉ๋๋ค.WithSummary: endpoint์ ๋ชฉ์ ์ ๋ช ํํ๊ฒ ์ค๋ช ํฉ๋๋ค.Produces(statusCode, schema): ์ํ ์ฝ๋์ ์๋ต contracts์ ์ง์ ํฉ๋๋ค.MapToApiVersion(1, 0): endpoint๋ฅผ API ๋ฒ์ ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค.RequirePermission,RequireAuthorization,AllowAnonymous๊ทธ๋ฆฌ๊ณRequireTenant: ํ๋ก์ ํธ ์ต์ ์ ๋ฐ๋ผ ๋ณด์์ ์ ์ฉํฉ๋๋ค.- ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ธ์ฆ๋ ์ ์ฑ ์ด๋ ์ต๋ช ์ ์ฑ ์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน ๋๋ endpoint ์์ค์์ ์๋๋ฅผ ์ ํํฉ๋๋ค.
์์ฒญ๊ณผ ์๋ต
๊ธฐ๋ณธ์ ์ผ๋ก Lino๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ก ์์ฒญ๊ณผ ์๋ต์ ์ํด. ์ด๋ ๊ฐ๊ฒฐํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ API, ํ์ํ๋ ํด๋ผ์ด์ธํธ ๋ฐ ์ธ๋ถ ์๋น์ ๊ฐ์ ๋ช ์์ contracts์ผ๋ก ์ ์๋ํฉ๋๋ค.
- endpoint๋ฅผ ํตํด ์์ ๋ ์์ฒญ์ ๋ช ๋ น ๋๋ ์ฟผ๋ฆฌ๋ก ๋ณํ๋ฉ๋๋ค.
- ๋ช ๋ น์ด๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ์๋ต์ผ๋ก ๋ณํ๋ฉ๋๋ค.
- ๋๋ฉ์ธ ์ํฐํฐ๋ contracts HTTP๋ก ์ง์ ๋ ธ์ถ๋์ด์๋ ์ ๋ฉ๋๋ค.
public record CreatePersonRequest(string Name, int Age); public record CreatePersonResponse(Guid Id, string Name, int Age);
์ API ์์ฑ
๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ด๋ฏธ HTTP์ ์ํด ๋ ธ์ถ๋ ๋งํผ ๋ช ํํ ๋ CLI๋ก API๋ฅผ ์์ฑํฉ๋๋ค. API๋ Minimal APIs, contracts, typed responses ๋ฐ ๋ฌธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ช ๋ น๊ณผ ์ฟผ๋ฆฌ๋ฅผ ํ๋ ์ ํ ์ด์ ๊ณ์ธต์ ์ฐ๊ฒฐํฉ๋๋ค.
lino api new lino api new --name <ApiName> --service <ServiceName> --module <ModuleName> --entity <EntityName> lino api list --service <ServiceName> --module <ModuleName> --entity <EntityName>
๋ํํ ๋ง๋ฒ์ฌ๋ ๋ค์ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
- ์๋น์ค: API๊ฐ ์์ฑ๋ ์๋น์ค์ ๋๋ค.
- ๊ธฐ์ค ์น์: ํด๋น๋๋ ๊ฒฝ์ฐ ์๋น์ค ๋ชจ๋์ ๋๋ค.
- ์ํฐํฐ ๋๋ ์ด๊ฑฐํ: ๋์ ๊ณผ ์ฐ๊ฒฐ๋ ๋๋ฉ์ธ ์์์ ๋๋ค.
- API์ ์ด๋ฆ: ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์
์ ๋์ฌ์ ์ ๋ ฌ๋ฉ๋๋ค.
CreatePerson. - ์์
์ ํ:
GET,POST,PUT,PATCH,DELETE, ์ ๋ก๋, ๋ค์ด๋ก๋ ๋๋ endpoint ์ต์ . - ๋
ธ์ :๊ฒฝ๋ก ํจํด, ์:
/people/{id:guid}. - ์์ฑ: ์ค์ ๋ก HTTP ๊ฒฝ๊ณ๋ฅผ ๋์ด์ผ ํ๋ ์์ฒญ ๋ฐ ์๋ต ํ๋์ ๋๋ค.
๋ง๋ฒ์ฌ๊ฐ ๊ตฌ์ฑํ ์ ์๋ ์ฌํญ
- ์ป๋ค: ๋จ์ผ ๊ฒฐ๊ณผ, ๋ชฉ๋ก, ํ์ด์ง ๋ชฉ๋ก ๋ฐ ์ต์ /์ ํ ์๋๋ฆฌ์ค.
- ์ฐํธ: ๋ช ๋ น ์ ํ ๋ฐ ์ ํํ ์์ฑ์ ํฌํจํ ์์ฑ ๋ฐ ๋น์ฆ๋์ค ์์ ์ ๋๋ค.
- ๋๋ค ๊ทธ๋ฆฌ๊ณ ๋ฐ์ : ์ ์ฒด ๋๋ ๋ถ๋ถ ์ ๋ฐ์ดํธ.
- ์ญ์ : ์ ๊ฑฐ๋ ์ญ์ ๋ช ๋ น์ ๋งคํ๋ฉ๋๋ค.
- ์
๋ก๋: ๋์
IFormFile๊ทธ๋ฆฌ๊ณDisableAntiforgery()ํ์ํ ๋. - ๋ค์ด๋ก๋:endpoint ๋ฐํ
FileStreamHttpResult; ์ธ์ฆ๋ ํ๋ก์ ํธ๋ ์์ ํ ํ์ผ ์ก์ธ์ค๋ฅผ ์ํด ํ ํฐ endpoint๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. - ์ด๊ฑฐ: ์์ฑ๋ ์ฟผ๋ฆฌ ๋ฐ ์๋ต๋ณ๋ก ์ ํจํ ์ต์ ์ ๋ ธ์ถํ๋ endpoint์ ๋๋ค.
๊ถ์ฅ ํ๋ฆ
- ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ํ๋ด๋ ์ํฐํฐ, ๋ช ๋ น ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฒํ ํฉ๋๋ค.
- ๋ฌ๋ฆฌ๋ค
lino api new์ฌ๋ฐ๋ฅธ ์๋น์ค, ๋ชจ๋ ๋ฐ ์ํฐํฐ๋ฅผ ์ ํํฉ๋๋ค. - ์ํ๋ HTTP ๋์ฌ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ ์ฌ๋ก๋ณ๋ก ์์ ์ ํ์ ์ ํํ์ธ์.
- ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ์์ ์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ ์ํฉ๋๋ค.
{id:int}๋๋{id:guid}์ ์ ํ ๊ฒฝ์ฐ. - HTTP ๊ฒฝ๊ณ๋ฅผ ๋์ด์ผ ํ๋ ์์ฑ๋ง ์ ํํ์ธ์.
- ์น์ธ, ๊ถํ, ํ ๋ํธ ์๊ตฌ ์ฌํญ, ์๋ ์ ํ ๋ฐ ์์ ์ํ ์ฝ๋๋ฅผ ์ ์ํฉ๋๋ค.
- ๋น๋๋ฅผ ์คํํ๊ณ Scalar/OpenAPI๋ฅผ ๊ฒ์ฌํ์ฌ ์์ฑ๋ ๊ฒฝ๋ก, ์์ฝ, ๋ฒ์ , ๋ณด์ ๋ฐ ์๋ต์ ํ์ธํฉ๋๋ค.
์: CreatePerson
API๋ฅผ ์์ฑํ ๋ POST ๋ถ๋ฅด๋ค CreatePerson, ์ํฐํฐ์ ์ฐ๊ฒฐ๋จ Person, CLI๋ endpoint, request/response contracts, ๋งคํ ํ์ฅ, OpenAPI ๋ฉํ๋ฐ์ดํฐ ๋ฐ ํด๋น ๋ช
๋ น๊ณผ์ ํตํฉ์ ์์ฑํฉ๋๋ค.
<ProjectName>/
โโโ src/
โโโ Services/
โโโ <ServiceName>/
โโโ Api/
โโโ Endpoints/
โโโ People/
โโโ CreatePerson/
โโโ CreatePersonEndpoint.cs
โโโ CreatePersonExtensions.cs
โโโ CreatePersonRequest.cs
โโโ CreatePersonResponse.cs
contracts์ ๋ฐ typed clients
ํ๋ก์ ํธ์ ์น ์ฑ Blazor๊ฐ ์๋ ๊ฒฝ์ฐ Lino๋ API์ ํ์ํ๋ ์๋น๋ฅผ ์ํ ์ํฐํฉํธ(๊ณต์ contracts, ํด๋ผ์ด์ธํธ ์ธํฐํ์ด์ค ๋ฐ HTTP ๊ตฌํ)๋ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด Blazor๋ ๊ฐ๋จํ๊ณ ์ผ๊ด๋๋ฉฐ ๊ฐ๋ ฅํ ํ์์ ๋ฐฉ์์ผ๋ก endpoint๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<ProjectName>/
โโโ src/
โโโ Services/
โโโ <ServiceName>/
โโโ Api.Contracts/
โ โโโ Features/
โ โโโ People/
โ โโโ CreatePerson/
โ โ โโโ CreatePersonRequest.cs
โ โ โโโ CreatePersonResponse.cs
โ โโโ IPersonApiClient.cs
โโโ Api.Client/
โโโ Features/
โโโ PersonApiClient.cs
ํด๋ผ์ด์ธํธ ์ธํฐํ์ด์ค๋ ์ข
์์ฑ ์ฃผ์
์ ์ํด ๋ฑ๋ก๋์์ผ๋ฉฐ ๊ตฌํ์์๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค. HttpClientProvider Tolitech์ HTTP ๋์ฐ๋ฏธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ ฅํ ํ์์ ๋ฐฉ์์ผ๋ก ์์ฑ๋ API๋ฅผ ํธ์ถํฉ๋๋ค.
์ถํ ์ ์ฒดํฌ๋ฆฌ์คํธ
- ์ฌ์ฉ
GET๋ ์๋ฅผ ์ํด,POST์์ฑ/์์ ์ ์ํด,PUT/PATCH๋ณํ๋ฅผ ์ํด ๊ทธ๋ฆฌ๊ณDELETE์๋ฏธ๊ฐ ์์ ๋ ์ ๊ฑฐํฉ๋๋ค. - ๋๋ฉ์ธ ์ํฐํฐ๋ฅผ ์ธ๋ถ contracts์ผ๋ก ์ง์ ๋ ธ์ถํ์ง ๋ง์ธ์.
- ๋ฌธ์ ์ ํจ์ฑ ๊ฒ์ฌ, ์ถฉ๋, ์ฐพ์ ์ ์์ ๋ฐ ์ก์ธ์ค ๊ฑฐ๋ถ ์ค๋ฅ.
- ์ฌ์ฉ
api list๋์ผํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ค๋ณต ๊ฒฝ๋ก๋ ๊ฒฝ์ endpoint๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
Source Generators๋ก endpoint ๋ฑ๋ก
Lino๋ Source Generators๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฉ๋ ํ์ผ์ ์๋์ผ๋ก ๋งคํํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ๋์ ์ ํ๋์ฉ ๋์ดํ๋ ๋์ Program.cs, ์ปดํ์ผ ์ค์ ๋ก๊ทธ๊ฐ ์์ฑ๋ฉ๋๋ค.
์์ฑ๋ endpoint ํด๋์ค ๊ตฌํ IEndpoint ~์ Tolitech.MinimalApis.Generators.Abstractions. endpoint ๊ทธ๋ฃน ํธ์ถ MapEndpointsGenerated(), ์ ์์ฌ: Tolitech.MinimalApis.Generators, ์์ฑ๋ ์ฝ๋๋ฅผ ํตํด ์ endpoint๊ฐ ๋ฑ๋ก๋ฉ๋๋ค.
์ด๊ฒ์ด ์ ์ค์ํ๊ฐ์?
- ์๋ ๋ฐฐ์ ๊ฐ์: ๊ฐ๋ฐ์๋ ๊ฐ endpoint๋ฅผ ์๋์ผ๋ก ๋งคํํ๋ ๊ฒ์ ๊ธฐ์ตํ ํ์๊ฐ ์์ต๋๋ค.
- ์ปดํ์ผ ์๊ฐ ์ผ๊ด์ฑ: endpoint๋ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฉฐ ์์ฑ๋ ์ฝ๋์ ์ํด ๊ฒ์๋ฉ๋๋ค.
- ํด๋ฆฌ๋ ์์:
Program.cs์๋น์ค, โโ๋ฏธ๋ค์จ์ด ๋ฐ ํ์ฅ ๋ฐฉ๋ฒ ๊ตฌ์ฑ์ ์ํ ์ค์ ์ ์์ํฉ๋๋ค. - AOT ํธํ์ฑ: ๋ฐํ์ ์ ๋ฆฌํ๋ ์ ์ ๋ํ ์ข ์์ฑ์ ์ค์ ๋๋ค.
- OpenAPI ์ผ๊ด์ฑ: ํ๊ทธ, ์์ฝ, ์ํ ์ฝ๋ ๋ฐ ๋ฒ์ ์ด endpoint์์ ์์ฑ๋ฉ๋๋ค.
- ์ํคํ ์ฒ ์ ๋ ฌ: HTTP๋ API์ ์๊ณ , ์ค์ผ์คํธ๋ ์ด์ ์ MediatR์ ํตํด ์ด๋ฃจ์ด์ง๋ฉฐ, contracts์ ํด๋ผ์ด์ธํธ์ ๊ณต์ ๋ ์ ์์ต๋๋ค.
๋ฐํ์ ์ ํ๋ฆ
Program.cs์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ณ ์๋น์ค ๋๋ ๋ชจ๋ endpoint์์ ํ์ฅ์ ํธ์ถํฉ๋๋ค.- ํ์ฅ์ API ๋ฒ์ ์ธํธ์ endpoint ๊ทธ๋ฃน์ ์์ฑํ๊ณ ๊ถํ ๋ถ์ฌ/์๋ ์ ํ์ ์ ์ฉํ๊ณ ํธ์ถํฉ๋๋ค.
MapEndpointsGenerated(). - ์์ฑ๋ ๋งคํผ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
MapEndpoint๊ฐ endpoint์ - ๊ฐ ๋์ ์ ๊ฒฝ๋ก, OpenAPI ๋ฉํ๋ฐ์ดํฐ, ๊ถํ, ํ ๋ํธ ์๊ตฌ ์ฌํญ ๋ฐ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋งคํํฉ๋๋ค.
- ํธ๋ค๋ฌ๋ ์ ๋ ฅ HTTP๋ฅผ ์์ ํ๊ณ ์ด๋ฅผ ๋ช ๋ น/์ฟผ๋ฆฌ๋ก ๋ณํํ ํ MediatR๋ก ๋ณด๋ด๊ณ ํ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ฅ ์ ์
์ค๋ฅ ์ ์๋ ์๋ ค์ง ๋๋ฉ์ธ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ฅ๋ฅผ ํ์คํํฉ๋๋ค. ์ด๋ API, ์ฒ๋ฆฌ๊ธฐ, ๋ก๊ทธ ๋ฐ ํ๋ฐํธ์๋๊ฐ ๊ฐ ๋์ ์์ ๊ธธ ์์ ๋ฉ์์ง, ์ค๋ณต ๋ฌธ์์ด ๋๋ ์์ ๊ฒฐ์ ์ ์์กดํ์ง ์๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
lino error-definition new --name <ErrorDefinitionName> --service <ServiceName> --module <ModuleName> --entity <EntityName> lino error-definition list --service <ServiceName> --module <ModuleName> --entity <EntityName>
์์ฑ๋ API์์ ๋ช
๋ น ๋ฐ ์ฟผ๋ฆฌ์ ์ํด ๋ฐํ๋ ์์ ์ค๋ฅ๋ ๋ค์์ผ๋ก ๋ณํ๋์ด์ผ ํฉ๋๋ค. ProblemDetails ์ํ ์ฝ๋, ์ค๋ฅ ์ฝ๋ ๋ฐ ๋ณด์ ๋ฉ์์ง๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์๋ฒ๋ ์์ธํ ๊ธฐ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ ์ ์์ง๋ง HTTP ์๋ต์ ์ผ๊ด๋๊ณ ์์ ํ๋ฉฐ ํ์งํ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
| ์ํ | ์ผ๋ฐ์ ์ธ ์ฌ์ฉ๋ฒ | ์ |
|---|---|---|
| 400 ์๋ชป๋ ์์ฒญ | ์๋ชป๋ ์ ๋ ฅ ๋๋ ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ์ ๋๋ค. | ํ์ ํ๋ ๋๋ฝ, ์๋ชป๋ ํ์, ์์๋ ์์ฒญ ๊ท์น. |
| 401 ๋ฌด๋จ | ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์ ๋๋ค. | ํ ํฐ์ด ๋๋ฝ๋์๊ฑฐ๋ ๋ง๋ฃ๋์๊ฑฐ๋ ์ ํจํ์ง ์์ต๋๋ค. |
| 403 ๊ธ์ง๋จ | ํ๊ฐ ์์ด ์ธ์ฆ๋ ์ฌ์ฉ์์ ๋๋ค. | ๋ค์์ ํ๊ฐ๊ฐ ํ์ํฉ๋๋ค: RequirePermission ๋ถ์ฌ๋์ง ์์. |
| 404 ์ฐพ์ ์ ์์ | ์กด์ฌํ์ง ์๋ ๋ฆฌ์์ค์ด๊ฑฐ๋ ํ์ฉ๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์ต๋๋ค. | ProductNotFound, ๋ค๋ฅธ ํ
๋ํธ์ ์ํฐํฐ ๋๋ ์ ์ ์๋ ์๋ณ์์
๋๋ค. |
| 409 ๊ฐ๋ฑ | ์ํ ์ถฉ๋ ๋๋ ๊ณ ์ ์ฑ ๊ท์น. | ์ค๋ณต๋ ๊ธฐ๋ก, ์๋ชป๋ ์ ํ, ๋ฒ์ ์ถฉ๋. |
๋ชจ๋ฒ ์ฌ๋ก
- ์์๋๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ค๋ฅ์ ๋ํ ์ค๋ฅ ์ ์๋ฅผ ๋ง๋ญ๋๋ค.
- ๊ธฐ์ ์ ์์ธ๋ ์ธํ๋ผ ์ธ๋ถ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ฐํํ์ง ๋ง์ธ์.
- ํ๋ฐํธ์๋, ์ ๋ ฅ๋ ํด๋ผ์ด์ธํธ ๋ฐ ํ ์คํธ๊ฐ ์์ ํ๊ฒ ๋ฐ์ํ ์ ์๋๋ก ์์ ์ ์ธ ์ค๋ฅ ์ฝ๋๋ฅผ ์ ์งํ์ธ์.
- endpoint๊ฐ ์์ฑํ ์ ์๋ ์ํ ์ฝ๋๋ฅผ OpenAPI์ ๋ฌธ์ํํฉ๋๋ค.
- ๊ณต๊ฐ ์๋ต์์ ์ง๋จ ์ธ๋ถ์ ๋ณด ๋ฐ ๋ณด์ ๋ฉ์์ง๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋ฒ ์ธก ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ์ธ์.
