Управление типом контента в веб-сервисе Restful - PullRequest
1 голос
/ 14 сентября 2011

Я разрабатываю веб-службу Restful для внутреннего корпоративного приложения, и мне любопытно, как объединить запросы JSON и «веб-контент».

Веб-приложение, как и все хорошие корпоративные приложения, имеет трибуквенное сокращение, которое отражено в URL.Предположим, что «позывной» этого приложения - abc, и пользователи получают к нему доступ по следующему URL

http://servername/abc

Когда пользователи получают доступ к корню приложения, мы хотим обслуживать их.вверх по главной html-странице, файлам .js (включая jquery), CSS и изображениям.Затем jquery начнет выполнять обратные вызовы AJAX на сервер.

Каков наилучший способ обработки этих нескольких типов содержимого?

http://servername/abc (возвращает содержимое индекса.html)

http://servername/abc/javascript/jquery.js (возвращает файл js)

http://servername/abc/countries/de (возвращает JSON)

Должен ли я разделить это на два веб-контекста?Должен ли я использовать параметр jquery contentType в вызовах ajax для явного указания JSON против HTML и чего-то еще?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

jQuery contentType - это на самом деле просто параметр, который устанавливает заголовок типа контента в HTTP-запросе к серверу.Всегда рекомендуется устанавливать их для вызовов AJAX.

Добавлено: Еще одна полезная практика - указать параметр dataType, поскольку он будет устанавливать заголовок accept в вашем HTTP-запросе.Это полезно как для запросов GET, так и для запросов POST AJAX.

Большинство, если не все, каркасы веб-сервисов (Rails, ASP.NET MVC, .NET WCF и т. Д.) Имеют возможность проверять заголовки HTTP-запроса и определять, какой тип контента следует обслуживать.

, например: application/json в заголовке HTTP позволит вашему веб-сервису узнать ответ JSON вместо ответа HTML или XML.

Некоторые из лучших способов, которыми я видел вебПриложения, организованные для обслуживания HTML / JSON, позволяют вашим стандартным маршрутам всегда обслуживать ваши HTML-страницы и ресурсы, например:

http://servername/abc

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

будет работать точнокак ты сказал.Для ваших ответов в формате JSON (или даже XML) я вижу, что люди создают маршрут, понятный для простоты для поддержки этих типов ответов, то есть:

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

, с которого начинается URL-маршрут/api/, который всегда следует понимать как ответ на не-html-ответ JSON / XML

, благодаря которому вашей компании довольно просто понять, что маршруты внутри /api/ являются вашими ответами JSON / XML.,Это также упрощает предоставление этих методов внешним клиентам, если вы захотите сделать это при наличии инфраструктуры, вам просто нужно будет аутентифицировать и т. Д. Запросы.

1 голос
/ 14 сентября 2011

Хороший способ сделать это - использовать стандартный HTTP Accept Header .В ваших ajax-запросах вы должны указывать этот заголовок как application / json, а затем все остальные веб-запросы будут включать заголовки принятия браузера.Затем на стороне сервера вы можете использовать заголовок Accept, чтобы определить, какой контент следует обслуживать.

Если вы используете JQuery, тогда заголовок Accept будет автоматически установлен на application / json, если для параметра dataType установлено значение"JSON."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...