이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 24777|회답: 3

[WebAPI] WebAPI는 반환 데이터 형식을 사용자 지정합니다

[링크 복사]
게시됨 2017. 11. 30. 오전 11:00:16 | | | |
최근에는 WebAPI를 사용할 때 브라우저가 WebAPI에 접근하고 기본값이 XML 형식이기 때문에, 이 반환된 데이터 형식은 사용자가 사용자가 사용자 맞춤 설정할 수 있어야 한다고 생각합니다. 서버가 XML 형식이나 JSON 형식을 반환할 수 있도록 해야 하며, 서버 코드 대신 말이죠!



서버 코드는 구성할 수 있지만, WebAPI의 원래 의도는 아니었던 것 같습니다.

1. WebAPI가 기본적으로 반환하는 데이터 타입은 json인가요, xml인가요?
2. WebAPI의 반환 데이터 타입 수정 방법
IE 브라우저를 사용해 반환되는 데이터가 JSON 형식인지 요청하고, Firefox와 Chrome에서 반환되는 데이터 형식은 XML입니다. 그리고 HttpWebRequest를 사용해 JSON 형식으로 반환을 요청합니다. 왜 같은 프로그램, 같은 설정 파일인지, 기본 출력 JSON이나 XML은 이해할 수 있는데도 출력 데이터 형식이 왜 다른지, 왜 브라우저가 다른지, 출력 형식이 다른지 궁금했습니다. 조사를 좀 해본 끝에, 결국 그 이유를 알게 되었습니다

테스트 결과, IE 브라우저를 사용할 때 반환되는 데이터는 json이고, Firefox와 Chrome을 사용할 때 반환되는 데이터는 xml이며, HTTP 요청이 발생할 때 IE는 Firefox와 Chrome에 비해 "application/xml" 타입이 부족하다는 것이 밝혀졌습니다. 따라서 기본값은 json 형식의 데이터이고, Firefox와 Chrome은 허용 가능한 XML 타입을 보내므로 xml 데이터가 반환되며, 다음은 IE, Firefox, Chrome의 요청 헤더입니다


수락은 요청에만 나타납니다

의미하는 바: 브라우저 측에서 허용되는 미디어 유형입니다


예를 들어, Accept: text/html은 브라우저가 서버에서 보내는 postback 유형을 텍스트/html로 받아들일 수 있음을 의미하며, 이를 일반적으로 html 문서라고 부릅니다

서버가 텍스트/HTML 유형의 데이터를 반환하지 못한다면, 406 오류(허용되지 않음)를 반환해야 합니다

와일드카드 *는 모든 유형을 나타냅니다

예를 들어, Accept: */*는 브라우저가 모든 유형을 처리할 수 있음을 의미합니다(일반적으로 브라우저가 이를 서버에 전송합니다)

예를 들어, Accept: text/*는 모든 하위 클래스가 허용됨을 의미합니다

Accept는 여러 유형의 분리를 지원할 수 있습니다

예를 들어, 수락: audio/*; q=0.2, 오디오/기본은 브라우저가 오디오/기본 미디어 유형을 선호하지만, 이 유형이 없으면 다른 오디오 유형도 사용할 수 있다는 의미입니다

여기서 q=0.2가 나타나는데, 이는 연관의 정도를 나타내는 값이며, 기본값은 1이며, 가장 큰 것부터 가장 작은 것까지 배열됩니다

예를 들어, 수락: 텍스트/평문; q=0.5, text/html, text/x-DVI; q=0.8, text/x-c

허용되는 타입 우선순위는 다음과 같습니다

1) 텍스트/HTML 텍스트/x-c

2) 텍스트/x-DVI

3) 텍스트/평면

q는 0-1 사이의 값이며, q의 기본값은 1이며, q=0은 허용 불가를 의미합니다



마지막으로 검사 결과입니다:

브라우저포맷 복귀  요청 수락 헤더
즉,JSONtext/html, application/xhtml+xml, */*
크롬XMLtext/html, application/xhtml+xml, application/xml; q=0.9,image/webp,image/apng,*/*; q=0.8
파이어폭스XMLtext/html, application/xhtml+xml, application/xml; q=0.9,*/*; q=0.8,*/*



다음 검사를 계속하세요

1. accept:application/json만 전송되고 결과는 json으로 반환됩니다

2. accept:application/xml만 전송되고, 결과는 xml을 반환합니다.

3. accept: application/xml과 application/json을 동시에 보내면 json이 반환됩니다

4. accept:application/json과 application/xml을 동시에 보내면 json이 반환됩니다

5. 우선순위를 수정하고 application/xml을 동시에 전송합니다. q=1.0,application/json; q=0.9이며, 결과는 xml을 반환했습니다

이로부터 다음과 같은 결론을 내릴 수 있다:

WebAPI의 반환 데이터 타입은 요청 헤더의 수락(accept)에 의해 결정되며, 기본 반환 타입은 json입니다
1. application/json이나 application/xml이 존재하지 않을 경우, json 데이터를 반환합니다
2. application/json만 사용 가능할 때, json 데이터를 반환합니다
3. application/xml만 사용할 경우, xml 데이터가 반환됩니다
4. application/json과 application/json이 동시에 있을 때, 반환되는 데이터 타입은 두 개의 순서와 무관하며, 두 데이터가 같은 우선순위를 가지면 json이 반환되고, 우선순위가 다를 경우 우선순위가 높은 타입이 반환됩니다



수락 헤드반환 유형
application/jsonJSON
application/xmlXML
application/xml,application/jsonJSON
application/json, application/xmlJSON
application/xml; q=1.0,application/json; q=1.0JSON
application/xml; q=0.9,application/json; q=0.9JSON
application/xml; q=1.0,application/json; q=0.9XML
application/xml; q=0.9,application/json; q=1.0JSON


아래에 나와 있습니다:





이전의:Python3는 동시 접근 수평 파티션 테이블을 구현합니다
다음:.Net MVC가 롱 폴링을 구현합니다
게시됨 2017. 11. 30. 오전 11:06:08 |
놀랍네요, 전에 이런 상황을 본 적이 있는데 왜 그런지 생각하지 못했어요
 집주인| 게시됨 2017. 11. 30. 오전 11:07:36 |
QWERTYU 2017-11-30 11:06에 게시됨
놀랍네요, 전에 이런 상황을 본 적이 있는데 왜 그런지 생각하지 못했어요

XML 형식 반환을 권장하지 않는 것이 권장되는데, 경우에 따라 JSON 형식 반환이 정상이며 XML 형식 반환이 예외를 던지기 때문입니다

예를 들어, 반환 값이 객체라면 반환 JSON 형식은 정상이며, 반환 XML 형식은 오류를 보고합니다
게시됨 2018. 4. 25. 오전 8:50:44 |
강의는 매우 상세하고 지식 포인트도 포함되어 있습니다. 감사합니다. 수집되었습니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com