API 개발
APIλ Lino μνκ³μμ μλΉμ€ κΈ°λ₯μ λ
ΈμΆνλ μ£Όμ μλ¨μ
λλ€.
μ΄ μ₯μμλ νλ μμν¬κ° μ¦μ μ¬μ© κ°λ₯ν Minimal APIsλ₯Ό μμ±νλ λ°©λ², Source Generatorsλ₯Ό ν΅ν μλ λ±λ‘ κ³Όμ , κ·Έλ¦¬κ³ λͺ
ννκ³ ν
μ€νΈ κ°λ₯νλ©° μ λ¬Έμνλ μλν¬μΈνΈλ₯Ό λ§λ€κΈ° μν΄ κΆμ₯νλ λ°©λ²μ μ€λͺ
ν©λλ€.
Minimal APIs
Linoλ μλν¬μΈνΈ μμ± μ κΈ°λ³Έμ μΌλ‘ Minimal API μ€νμΌμ μ¬μ©νλ©°, λ€μμ μ°μ μν©λλ€:
- λͺ νμ± β κ°κ²°νκ³ μ§κ΄μ μ΄λ©° ννλ ₯μ΄ μλ μ½λ.
- μ±λ₯ β λΆνμν μ€λ²ν€λ μμ΄ μ΅μ νλ μλ΅.
ν΅ν© κΈ°λ₯
TypedResults: κ°λ ₯ν νμ μ μλ΅μ 보μ₯νμ¬ κ°λ μ±κ³Ό OpenAPI μμ±μ λμμ μ€λλ€.
API λ²μ κ΄λ¦¬: μλν¬μΈνΈλ νΈνμ±μ κΉ¨μ§ μκ³ νμ₯ν μ μμ΅λλ€.
νλΆν λ¬Έμν: κ΅¬μ± κ°λ₯ν λ©νλ°μ΄ν°κ° OpenAPIμ μ§μ ν¬ν¨λλ©°, λ€μμ ν¬ν¨ν©λλ€:
- WithTags β OpenAPIμμ μλν¬μΈνΈλ₯Ό λ Όλ¦¬μ μΉμ μΌλ‘ κ·Έλ£Ήνν©λλ€.
- WithName β operationIdλ₯Ό μΌκ΄λκ² μ μν©λλ€.
- WithSummary β μλν¬μΈνΈ λͺ©μ μ λͺ νν μ€λͺ ν©λλ€.
- Produces(statusCode, schema) β μν μ½λμ μλ΅ κ³μ½μ μ§μ ν©λλ€.
- MapToApiVersion β λμΌν μλν¬μΈνΈμ λ€λ₯Έ λ²μ μ λ ΈμΆν μ μμ΅λλ€.
Requests λ° Responses
Record classesλ κΈ°λ³Έμ μΌλ‘ Requestsμ Responsesμ μ¬μ©λ©λλ€:
- λΆλ³(λΆμμ©κ³Ό λ²κ·Έ κ°μ)
- κ°κ²°νκ³ μ½κΈ° μ¬μ
CQRSμμ ν΅ν©:
- μλν¬μΈνΈλ₯Ό ν΅ν΄ μμ λ μμ²μ Commands λλ Queriesλ‘ λ³νλ©λλ€.
- Commands/Queriesμ κ²°κ³Όλ Responsesλ‘ λ³νλμ΄ μν€ν μ² μΌκ΄μ±μ μ μ§ν©λλ€.
κ°λ¨ν μ:
public record CreatePersonRequest(string Name, int Age);
public record CreatePersonResponse(Guid Id, string Name, int Age);
μλ‘μ΄ API λ§λ€κΈ°
Lino CLIλ₯Ό μ¬μ©νμ¬ μλν¬μΈνΈλ₯Ό λ§λλ κ²μ λ§€μ° κ°λ¨ν©λλ€:
lino new api
λνν λ§λ²μ¬κ° λ€μμ μμ²ν©λλ€:
- μλΉμ€ β APIκ° μμ±λ μλΉμ€.
- λͺ¨λ β μλΉμ€μ λͺ¨λ(ν΄λΉλλ κ²½μ°).
- μν°ν° β μλν¬μΈνΈμ μ°κ²°λ μν°ν°.
- API μ΄λ¦ β μΌλ°μ μΌλ‘ μμ λμ¬μ μΌμΉ (μ: CreatePerson).
- μμ μ ν β POST, PUT, PATCH, DELETE λλ GET.
- λΌμ°νΈ β λΌμ°νΈ ν¨ν΄ (μ: /people/{id}).
μμ:
Person μν°ν°μ μ°κ²°λ CreatePersonμ΄λΌλ POST APIλ₯Ό μμ±νλ©΄, CLIλ μλμΌλ‘ λ€μμ μμ±ν©λλ€:
- HTTP λ§€νμ΄ ν¬ν¨λ μλν¬μΈνΈ.
- μμ²/μλ΅ DTO.
- OpenAPI ν΅ν© λ° λ²μ κ΄λ¦¬λ₯Ό μν νμ₯.
- λ€λ₯Έ μλΉμ€μμ λ΄λΆμ μΌλ‘ μ¬μ©ν μ μλ νμ μ§μ HttpClient.
μμ±λ ꡬ쑰:
MyApp/
βββ src/
βββ Services/
β βββ MyService/
β βββ Presentation.API/
β βββ MyApp.MyService.Presentation.API.csproj
β βββ Endpoints/
β βββ People/
β βββ CreatePerson/
β βββ CreatePersonEndpoint.cs
β βββ CreatePersonExtensions.cs
β βββ CreatePersonRequest.cs
β βββ CreatePersonResponse.cs
βββ Integrations/
βββ MyService/
βββ Http/
βββ Contracts/
β βββ Apis/
β βββ People/
β βββ IPersonHttpClient.cs
β βββ CreatePerson/
β βββ CreatePersonRequest.cs
β βββ CreatePersonResponse.cs
βββ Clients/
βββ Apis/
βββ PersonHttpClient.cs
Source Generatorsλ₯Ό μ¬μ©ν μλν¬μΈνΈ λ±λ‘
Linoλ μλν¬μΈνΈλ₯Ό μλμΌλ‘ λ§€ννκ±°λ λ°νμμ Reflectionμ λ§μ΄ μ¬μ©νλ νμμ±μ μ κ±°ν©λλ€.
λμ , Source Generatorsλ₯Ό μ¬μ©νμ¬ μ»΄νμΌ μ μλμΌλ‘ λ±λ‘ μ½λλ₯Ό μμ±ν©λλ€.
μλ λ°©μ
μμ±λ κ° μλν¬μΈνΈμ λν΄ μ λλ μ΄ν°λ MapGet, MapPost, MapPut, MapDelete λ± νΈμΆνλ ν΄λμ€/λΆλΆ ν΄λμ€λ₯Ό μμ±ν©λλ€.
μ΄λ Program.csμ λͺ¨λ λ§€νμ μλμΌλ‘ μΆκ°ν νμλ₯Ό λ체ν©λλ€.
μ₯μ :
- μ»΄νμΌ νμ λ±λ‘ β λ°νμ μ€λ₯ λ°©μ§.
- κ°κ²°ν Program.cs β μλ κ΅¬μ± λ²μ κ°μ.
- AOT νΈνμ± β Reflection μμ‘΄μ± μ κ±°.
- ν΅ν© λ¬Έμ β λ©νλ°μ΄ν°(tags, summary, produces)κ° λ§€νκ³Ό ν¨κ» μμ±λ¨.
μ΄ λͺ¨λΈμ Linoμμ μμ±λ APIκ° λ€μμ 보μ₯ν©λλ€:
- μλ λ¬Έμν
- λμ μ±λ₯
- νλ μμν¬μ CQRS μν€ν μ²μ μΌμΉ
