3. CRUD 기능

3-12. 콘텐츠 협상 (Content Negotiations)

이 섹션에서는 API에서 클라이언트의 Accept 헤더에 따라 다른 형식의 응답을 반환하는 콘텐츠 협상 방법을 다룹니다. 기본적으로 API는 JSON 형식의 응답을 반환하지만, XML과 같은 다른 형식을 지원하도록 구성할 수 있습니다.

  1. 기본 응답 형식:
    • API는 기본적으로 JSON 형식의 응답을 반환합니다. 클라이언트가 Accept 헤더를 통해 특정 응답 형식을 요청하지 않은 경우, JSON 형식이 사용됩니다.
  2. 응답 형식 명시적 지정:
    • 클라이언트는 Accept 헤더를 사용하여 원하는 응답 형식을 명시적으로 지정할 수 있습니다. 예를 들어, application/json을 지정하면 JSON 형식의 응답을 요청할 수 있습니다.
  3. 응답 형식 제한:
    • API에서 지원하지 않는 응답 형식을 클라이언트가 요청하는 경우, 406 Not Acceptable 상태 코드를 반환하여 요청된 형식이 지원되지 않음을 알릴 수 있습니다.program.cs 파일에서 AddControllers 메서드에 options => options.ReturnHttpNotAcceptable = true;를 추가하여 설정할 수 있습니다.
  4. XML 형식 지원 추가:
    • API가 XML 형식의 응답도 지원하도록 하려면, AddXmlDataContractSerializerFormatters 메서드를 사용하여 XML 포맷터를 추가합니다.이 설정을 추가하면, 클라이언트가 Accept 헤더에 application/xml을 지정했을 때 XML 형식의 응답을 반환할 수 있습니다.
  5. 테스트 및 검증:
    • Postman을 사용하여 Accept 헤더를 다르게 설정하고 API 응답을 테스트합니다. JSON 및 XML 형식의 응답이 올바르게 반환되는지 확인합니다. key : Accept, Value: application/xml
  6. 실습 예시:
    • 위 코드는 API가 406 Not Acceptable을 반환하도록 설정하고, XML 형식의 응답을 지원하도록 구성하는 방법을 보여줍니다.
builder.Services.AddControllers(option => {
    option.ReturnHttpNotAcceptable = true;
}).AddNewtonsoftJson().AddXmlDataContractSerializerFormatters();

key : Accept, Value: application/xmlComment

콘텐츠 협상을 통해 API는 클라이언트의 요구에 맞춰 다양한 형식의 응답을 유연하게 제공할 수 있습니다.

이는 API의 사용성을 높이고, 다양한 클라이언트 애플리케이션의 요구를 충족시키는 데 중요한 역할을 합니다.

PostMan application/xml

프로젝트 리소스

https://github.com/kimdaewoong2022/MorePlants_WebAPI/tree/e4229acaa70f76ae7dd326ac48b25eed18b096ac