이 섹션에서는 API에서 클라이언트의 Accept
헤더에 따라 다른 형식의 응답을 반환하는 콘텐츠 협상 방법을 다룹니다. 기본적으로 API는 JSON 형식의 응답을 반환하지만, XML과 같은 다른 형식을 지원하도록 구성할 수 있습니다.
- 기본 응답 형식:
- API는 기본적으로 JSON 형식의 응답을 반환합니다. 클라이언트가
Accept
헤더를 통해 특정 응답 형식을 요청하지 않은 경우, JSON 형식이 사용됩니다.
- API는 기본적으로 JSON 형식의 응답을 반환합니다. 클라이언트가
- 응답 형식 명시적 지정:
- 클라이언트는
Accept
헤더를 사용하여 원하는 응답 형식을 명시적으로 지정할 수 있습니다. 예를 들어,application/json
을 지정하면 JSON 형식의 응답을 요청할 수 있습니다.
- 클라이언트는
- 응답 형식 제한:
- API에서 지원하지 않는 응답 형식을 클라이언트가 요청하는 경우,
406 Not Acceptable
상태 코드를 반환하여 요청된 형식이 지원되지 않음을 알릴 수 있습니다.program.cs
파일에서AddControllers
메서드에options => options.ReturnHttpNotAcceptable = true;
를 추가하여 설정할 수 있습니다.
- API에서 지원하지 않는 응답 형식을 클라이언트가 요청하는 경우,
- XML 형식 지원 추가:
- API가 XML 형식의 응답도 지원하도록 하려면,
AddXmlDataContractSerializerFormatters
메서드를 사용하여 XML 포맷터를 추가합니다.이 설정을 추가하면, 클라이언트가Accept
헤더에application/xml
을 지정했을 때 XML 형식의 응답을 반환할 수 있습니다.
- API가 XML 형식의 응답도 지원하도록 하려면,
- 테스트 및 검증:
- Postman을 사용하여
Accept
헤더를 다르게 설정하고 API 응답을 테스트합니다. JSON 및 XML 형식의 응답이 올바르게 반환되는지 확인합니다. key : Accept, Value: application/xml
- Postman을 사용하여
- 실습 예시:
- 위 코드는 API가
406 Not Acceptable
을 반환하도록 설정하고, XML 형식의 응답을 지원하도록 구성하는 방법을 보여줍니다.
- 위 코드는 API가
builder.Services.AddControllers(option => {
option.ReturnHttpNotAcceptable = true;
}).AddNewtonsoftJson().AddXmlDataContractSerializerFormatters();
key : Accept, Value: application/xmlComment
콘텐츠 협상을 통해 API는 클라이언트의 요구에 맞춰 다양한 형식의 응답을 유연하게 제공할 수 있습니다.
이는 API의 사용성을 높이고, 다양한 클라이언트 애플리케이션의 요구를 충족시키는 데 중요한 역할을 합니다.
프로젝트 리소스
https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/e4229acaa70f76ae7dd326ac48b25eed18b096ac