2011-09-14 3 views
1

내부 회사 응용 프로그램을위한 안정적인 웹 서비스를 설계하고 있으며 JSON과 "웹 콘텐츠"요청을 병합하는 방법이 궁금합니다.안정적인 웹 서비스에서 콘텐츠 유형 제어

웹 응용 프로그램은 모든 훌륭한 기업용 응용 프로그램과 마찬가지로 3 자로 된 약어로 URL에 반영됩니다. 의이 응용 프로그램의 "호출 부호는"ABC이라고 가정 해 봅시다, 그리고 사용자가 우리의 주요 HTML 페이지를 그들을 제공 할 응용 프로그램의 루트 액세스 할 때 사용자가 다음과 같은 URL

http://servername/abc

에 액세스, .js 파일 (jquery 포함), css 및 이미지 그런 다음 jquery가 AJAX 호출을 서버로 다시 시작합니다.

이러한 여러 콘텐츠 형식을 처리하는 가장 좋은 방법은 무엇입니까?

http://servername/abc (index.html을의 반환 내용)

http://servername/abc/javascript/jquery.js (A JS 파일을 반환)

http://servername/abc/countries/de (반환 JSON)

나는 두 개의 웹 컨텍스트로이 분할해야 하는가? ajax 호출에서 jquery contentType 매개 변수를 사용하여 JSON 대 HTML을 명시 적으로 지정해야합니까?

답변

2

jQuery contentType은 실제로 서버에 대한 HTTP 요청의 콘텐츠 형식 헤더를 설정하는 매개 변수입니다. AJAX 호출에 대해 항상 이것을 설정하는 것이 좋습니다.

추가 : 또 다른 좋은 방법은 dataType 매개 변수를 지정하여 HTTP 요청의 수락 헤더를 설정하는 것입니다. 이는 GET 및 POST AJAX 요청 모두에 유용합니다.

대부분의 경우 웹 서비스 프레임 워크 (Rails, ASP.NET MVC, .NET WCF 등)는 HTTP 요청의 헤더를 검사하여 검색 할 콘텐츠 유형을 결정합니다.

예 : HTTP 헤더의 application/json은 웹 서비스가 HTML 또는 XML 응답 대신 JSON 응답을 반환하도록 알려줍니다.

내가 표준 경로는 항상 당신의 HTML 페이지와 자원, 즉 제공하기 위해 HTML/JSON의 서빙을위한 조직 웹 응용 보았다 더 나은 방법 중 일부 :

http://servername/abc

http://servername/abc/javascript/jquery.js

은 당신이 말한 것과 똑같을 것입니다.

http://servername/api/abc/countries/de

의 URL 경로가 항상 것 인 /api/로 시작하여 JSON (또는 XML) 응답, 나는 사람들이 명시 적으로는 응답 이러한 유형을 다시 역할을 이해하는 경로, 즉 만들기를 참조하십시오 non-html JSON/XML 응답을 돌려 주겠다고 이해했습니다.

이렇게하면 /api/ 경로가 JSON/XML 응답임을 내부적으로나 외부에서 쉽게 이해할 수 있습니다. 또한 인프라가 존재할 때 외부 고객에게이 메소드를 노출시키는 것이 더 쉬워지며 요청을 인증하기 만하면됩니다.

+1

JQuery의 contentType 매개 변수는 웹 서버 (HTTP POST)에 데이터를 게시하는 경우에만 사용됩니다. 서버 (HTTP GET)에서 JSON 데이터를 요청하려는 경우 JQuery에서 dataType 매개 변수를 사용해야하며,이 경우 HTTP 수락 헤더가 설정됩니다. –

+0

맞음 - 답변에 추가됨 – ericb

+0

2cent 추가 : ASP.NET 웹 API에서 콘텐츠 유형을 설정하지 않고 POST (또는 PUT 또는 PATCH)를 보내면 모델 바인딩이 (일반적인 설정에서) 실패합니다. 프레임 워크는 게시 된 컨텐트를 deserialize하는 방법을 알지 못합니다. 여기에이 대답을 추가하면 일반적으로 가장 많이 읽습니다. 일반적으로 JSON이 내 API에 게시 된 이유가 실패로 끝나는 이유를 많은 시간을 들여 보았습니다. desirialized) – dotnetguy

1

이것을 수행하는 좋은 방법은 표준 HTTP Accept Header을 사용하는 것입니다. 아약스 요청에서이 헤더를 application/json으로 지정하면 다른 모든 웹 요청에는 브라우저의 수락 헤더가 포함됩니다. 그런 다음 서버 측에서 Accept 헤더를 사용하여 제공 할 컨텐츠를 결정할 수 있습니다.

JQuery를 사용하는 경우 dataType 매개 변수가 "json"으로 설정된 경우 Accept 헤더가 application/json으로 자동 설정됩니다.

관련 문제