Додзё, Jsonp И Всё, Всё, Всё.

Добрый день, уважаемые HabraLadies и HabraJampelmen. Сегодня я расскажу вам о создании API для вашего сайта.

Знаю, что тема в некоторых местах довольно затянутая, но с недостатком определенной информации я столкнулся при разработке API для одного из проектов.

Мы поговорим о JSONP, SMD и компоненте Dojo dojox.rpc.Service. Интересный? - Пожалуйста, под кат. Начнем с плиты.

JSONP (JSON Padding) или «Padding JSON» — это расширение JSON, когда имя функции обратного вызова указано в качестве входного аргумента.

Википедия Фишка в том, что в результате сервер возвращает javascript-код вызова этой самой функции с самими переданными в нее данными.

Таким образом, включив этот код на стороне клиента, мы можем обойти ограничение того же происхождения для нормального взаимодействия Ajax. СМД .

SMD (описание служебного сообщения) — это язык описания веб-сервисов и доступа к ним, основанный на языке JSON. Вот пример простого smd-файла:

  
   

{ transport: "JSONP", envelope: "URL", target: " http://mysite.org/api/find ", parameters: [ { name: "appid", optional: false, "default": "client" } ], services: { service1: { target: " http://mysite.org/api/find_image ", parameters: [ { name: "query", type: "string", optional: false, "default": "" }, { name: "max_height", type: "integer", optional: true }, ] }, service2: { target: " http://mysite.org/api/find_video ", parameters: [ { name: "query", type: "string", optional: false, "default": "" } ] }, } }

Как видите, smd-файл можно разделить на две части — параметры по умолчанию и блок с параметрами для конкретных сервисов.

Не буду останавливаться на расшифровке названий всех параметров — они говорят сами за себя — отмечу лишь, что внутри компонента dojox.rpc.Service параметр транспорт может принимать одно из следующих значений: ПОСТ, ПОЛУЧИТЬ, JSONP параметр конверт - один из: URL-адрес, JSON, ПУТЬ Теперь о вкусненьком, или как заставить его работать

var smd = new dojox.rpc.Service("/smd/api_1.smd"); var d = smd.service1({query:"image_001"}); d.addCallback(function(result) { alert("gotcha! " + result); });

smd.service1({запрос:"image_001"}) эта строка вернет нам отложенный объект, которому мы сможем назначить функцию обратного вызова (или несколько).

Теперь мы можем получать доступ к сервисам по имени, имея файл конфигурации в своем расположении.

Примечания: начинать 1. Для использования транспорта JSONP необходимо подключить библиотеку dojo.io.script 2. Компонент dojox.rpc.Service должен быть загружен раньше dojo.io.script чтобы избежать ошибки «совпадение не найдено» 3. Сервер должен вернуть в ответ тело скрипта (без парного тега сценарий ) с вызовом функции, имя которой передается в качестве параметра перезвонить .

Чтобы избежать ошибок, следует сверить функцию с неопределенный habrahabr.ru/post/62314 конец.

Ну вот и всё, спасибо за внимание.

Комментарии и исправления приветствуются; по просьбе работников статью можно дополнить (возможно что-то упустил из виду).

Теги: #api #dojo #jsonp #.

сmd #JavaScript #api

Вместе с данным постом часто просматривают: