2. Потребление информации
• через сайт;
• через мобильное приложение, выпущенное создателем сайта;
• через мобильное приложение, выпущенное кем-то другим;
• сторонние сервисы;
• ...
API Client
3. Что такое REST?
REpresentational State Transfer
«передача состояния представления» (Никакой картинки в голове)
• архитектурный стиль (не протокол и не стандарт);
• простой интерфейс управления информацией без использования каких-то
дополнительных внутренних прослоек;
• каждая единица информации однозначно определяется глобальным
идентификатором, таким как URL;
• каждый URL в свою очередь имеет строго заданный формат;
5. Архитектура REST
• Единый интерфейс (Uniform Interface)
• Отсутствие состояний (Stateless)
• Кеширование ответа (Cacheable)
• Клиент-сервер (Client-Server)
• Многоуровневая система (Layered System)
• "Код по требованию" (Code on Demand - опционально)
6. REST. Requests
GET /book/ — получить список всех книг
GET /book/3/ — получить книгу номер 3
POST /book/ — добавить книгу (данные в теле запроса)
PUT /book/3 – изменить книгу (данные в теле запроса)
DELETE /book/3 – удалить книгу
7. REST. Response
HTTP коды:
• 1xx: Informational
• 2xx: Success
• 3xx: Redirection
• 4xx: Client Error
• 5xx: Server Error
Форматы:
• json
• xml
• csv
• other (html, xls и т.д.)
8. А как проверить?
Curl:
curl -XPOST -H 'Content-type: application/json' -d '{"name":"Alex"}' http://localhost/api/v1.0/users
Postman:
http://www.getpostman.com/
9. Рекомендации
• Логические URL вместо физических;
• Постраничный вывод больших объёмов данных;
• Документируйте;
• Действительный адрес пункта в ответе;
• Точное использование методов;
11. Пример использования на клиенте
<?php
$ch = curl_init(); // create curl resource
curl_setopt($ch, CURLOPT_URL, "example.com"); // set url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return the transfer as a string
$output = curl_exec($ch); // $output contains the output string
curl_close($ch); // close curl resource to free up system resources
12. Пример использования на клиенте
$.ajax({
type: 'GET',
url: '/book/',
dataType: 'json'
}).done(function (response) {
// Обработка ответа, например, отображение списка книг на странице
}).fail(function (jqXHR, textStatus) {
// Обработка ошибок, нотификация пользователя
});