Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

API-servers. Lecture 2 - RESTful API. Viktor Gubochkin. NURE

API-сервера. Лекция 2 - RESTful API.
by

Viktor Gubochkin

on 8 October 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of API-servers. Lecture 2 - RESTful API. Viktor Gubochkin. NURE

RESTful API
CREATE
Для создания записи используется метод POST:
>> POST /users/
firstName=Petrik&lastName=Petrenko
<< HTTP/1.1 201 Created
<< Location: /users/4

В JSON формате запрос на сервер будет выглядеть несколько иначе:
>> POST /users/
>> Content-Type:application/json
{"firstName":"Petrik","lastName":"Petrenko"}

В случае ошибки:
>> POST /users/
>> Content-Type:application/json
{"firstName":"#"}
<< HTTP/1.1 400 Bad Request
<< Content-Type:application/json
TEST
Возьмите ТЕТРАДНЫЕ листочки, подпишите: Имя, Фамилия, группа, дата, подпись.
API VERSIONS
Если ваш сервис просуществует довольно продолжительное время, то скорей всего его настигнет необходимость расширение и изменение функционала, и как следствие у вас появится несколько версий API. Согласно авторам книги «Web API Design» — лучше всего указывать версию API как часть пути:

>> GET /v1/users
READ
Получим список записей с сервера:
>> GET /users/
<< HTTP/1.1 200 OK
[
{id:1, firstName:"Ivan", lastName:"Ivanov"},
{id:2, firstName:"Petr", lastName:"Petrov"}
]

Получить данные конкретной записи:
>> GET /users/2
<< HTTP/1.1 200 OK
{id:2, firstName:"Petr", lastName:"Petrov"}

Если запрашиваемой записи нет:
>> GET /users/42
<< HTTP/1.1 404 Not Found
REST c CRUD
REST (Representational state transfer) – это стиль архитектуры программного обеспечения для распределенных систем, таких как World Wide Web, который, как правило, используется для построения веб-служб. Термин REST был введен в 2000 году Роем Филдингом, одним из авторов HTTP-протокола. Системы, поддерживающие REST, называются RESTful-системами.
UPDATE
Для изменения данных RESTful предполагает использования двух методов PUT и PATCH, различия в них лишь в том, что PUT предполагает замену записи полностью, а PATCH должен обновлять лишь данные, которые пришли в запросе.
>> PUT /users/2
firstName=Petr&lastName=Petrenko
<< HTTP/1.1 200 OK
В формате JSON:
>> PUT /users/2
>> Content-Type:application/json
{"firstName":"Petr","lastName":"Petrenko"}
<< HTTP/1.1 200 OK
В случае отсутствия записи:
>> PUT /users/42
firstName=Petr&lastName=Petrenko
<< HTTP/1.1 404 Not Found
В случае если ничего не изменилось:
>> PUT /users/2
firstName=Petr&lastName=Petrov
<< HTTP/1.1 304 Not Modified
На сервер отправляем лишь изменившиеся данные:
>> PATCH /users/2
lastName=Petrov
<< HTTP/1.1 200 OK

Коды состояний HTTP
DELETE
Используем метод DELETE:

>> DELETE /users/3
<< HTTP/1.1 204 No Content
JSON
JSON (англ. JavaScript Object Notation) - текстовый формат обмена данными, основанный на языке JavaScript.
JSON-текст представляет собой одну из двух структур:
Набор пар "ключ: значение". В различных языках это реализовано как объект, запись, структура, словарь, хэш-таблица, список с ключом или ассоциативный массив. Ключом может быть только регистрозависимая строка, значением - любой формат.
Упорядоченный набор значений. Во многих языках это реализовано как массив, вектор, список или последовательность.
Viktor Gubochkin
GET PUT POST DELETE
CRUD (сокр. от англ. create, read, update, delete — «создать, прочитать, обновить, удалить») - сокращённое именование четырёх базовых функций, используемых при работе с персистентными хранилищами данных: создание, чтение, редактирование, удаление.
Create Read Update Delete
POST GET PUT DELETE
/users Создание юзера Список юзеров Обновить данные юзера Удалить все
/users/17 Ошибка Данные юзеров Обновить данные Удалить юзера
СВЯЗАННЫЕ ДАННЫЕ
Если в вашем проекте больше одной сущности и они связаны между собой, необходимо добавлять в API выборку этих записей. Предположим, что наши пользователи завели домашних животных:
>> GET /users/1/pets
<< HTTP/1.1 200 OK
[
{id:1, petName:"Barsik", petFamily:"Cat"},
{id:1, petName:"Tuzik", petFamily:"Dog"}
]

Если нас заинтересовал лишь первый питомец:
>> GET /users/1/pets/1
<< HTTP/1.1 200 OK
{id:1, petName:"Barsik", petFamily:"Cat"}
2xx: Success (успешно):
*200 OK
*201 Created («создано»)
202 Accepted («принято»)
203 Non-Authoritative Information
*204 No Content («нет содержимого»)
205 Reset Content («сбросить содержимое»)
206 Partial Content («частичное содержимое»)
207 Multi-Status («многостатусный»)
3xx: Redirection (перенаправление):
300 Multiple Choices («множество выборов»)
*301 Moved Permanently («перемещено навсегда»)
*302 Moved Temporarily («перемещено временно»)
302 Found («найдено»)
303 See Other (смотреть другое)
*304 Not Modified (не изменялось)
305 Use Proxy («использовать прокси»)
306 - зарезервировано
*307 Temporary Redirect («временное перенаправление»)


4xx: Client Error (ошибка клиента):
*400 Bad Request («плохой, неверный запрос»)
*401 Unauthorized («не авторизован»)
402 Payment Required («необходима оплата»)
*403 Forbidden («запрещено»)
*404 Not Found («не найдено»)
*405 Method Not Allowed («метод не поддерживается»)
406 Not Acceptable («неприемлемо»)
407 Proxy Authentication Required
*408 Request Timeout («истекло время ожидания»)
409 Conflict («конфликт»)
5xx: Server Error (ошибка сервера):
*500 Internal Server Error («внутренняя ошибка сервера»)
501 Not Implemented («не реализовано»)
*502 Bad Gateway («плохой, ошибочный шлюз»)
503 Service Unavailable («сервис недоступен»)
*504 Gateway Timeout («шлюз не отвечает»)
*наиболее встречаемые (необходимо запомнить)
Наиболее встречаемые коды состояния (список не полный)
В качестве значений в JSON могут быть использованы:
Объект - это неупорядоченное множество пар "ключ:значение", заключённое в фигурные скобки «{ }». Между ключом и значением стоит символ «:». Пары ключ-значение отделяются друг от друга запятыми.
Массив - это упорядоченное множество значений. Массив заключается в квадратные скобки «[ ]». Значения разделяются запятыми.
Число.
Литералы true, false и null.
Строка - это упорядоченное множество из нуля или более символов юникода, заключенное в двойные кавычки.
{
"firstName": "Иван",
"lastName": "Иванов",
"address": {
"streetAddress": "Науки, 14",
"city": "Харьков",
"postalCode": 61000
},
"phoneNumbers": [
"057 702-1413",
"057 702-1410"
]
}
1) Привидите пример JSON-объекта (10 полей разного типа);
2) Дайте название вашему объекту.
Например: "user", "animal", "hotel", "student";
3) Составьте возможные RESTful API запросы к вашему объекту (минимум 5) с учётом, что у вас используется
"v(%ваш номер по списку в журнале%)"
версия API. Например:

GET /v3/student/7/semester/7 - получить информацию (объект) седьмого семестра студента под номером семь.
Full transcript