Добрый день, уважаемые HabraLadies и HabraJampelmen. Сегодня я расскажу вам о создании API для вашего сайта.
Знаю, что тема в некоторых местах довольно затянутая, но с недостатком определенной информации я столкнулся при разработке API для одного из проектов.
Мы поговорим о JSONP, SMD и компоненте Dojo dojox.rpc.Service. Интересный? - Пожалуйста, под кат. Начнем с плиты.
JSONP (JSON Padding) или «Padding JSON» — это расширение JSON, когда имя функции обратного вызова указано в качестве входного аргумента.
Википедия Фишка в том, что в результате сервер возвращает javascript-код вызова этой самой функции с самими переданными в нее данными.
Таким образом, включив этот код на стороне клиента, мы можем обойти ограничение того же происхождения для нормального взаимодействия Ajax. СМД .
SMD (описание служебного сообщения) — это язык описания веб-сервисов и доступа к ним, основанный на языке JSON. Вот пример простого smd-файла:
Как видите, 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": "" } ] }, } }
Не буду останавливаться на расшифровке названий всех параметров — они говорят сами за себя — отмечу лишь, что внутри компонента 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
-
Когда Мы Были Молоды... Компьютерщики
19 Oct, 24 -
Полностью Автоматическая Ручная Система
19 Oct, 24 -
Исправление Зависания Кнопок На Nexus 4
19 Oct, 24