Еще в
главе 2 мы немного поговорили о
ресурсах. Напомним, что ресурсы — это существительные в API-интерфейсах (клиенты и пицца). Это то, с чем мы хотим, чтобы мир мог взаимодействовать через наш API.
Чтобы понять, как компания разрабатывает API, давайте попробуем это сделать в нашей пиццерии. Начнем с добавления возможности заказать пиццу.
Чтобы клиент мог поговорить с нами о пицце, нам нужно сделать несколько вещей:
- Решить, какие ресурсы должны быть доступны.
- Назначить URL-адреса этим ресурсам.
- Решить, какие действия клиенту следует разрешить выполнять с этими ресурсами.
- Выяснить, какие фрагменты данных требуются для каждого действия и в каком формате они должны быть.
Выбор ресурсов может оказаться непростой первой задачей. Один из способов подойти к проблеме — пройти через то, что включает в себя типичное взаимодействие. В нашей пиццерии наверняка есть меню. В этом меню — пицца. Когда клиент хочет, чтобы мы приготовили для него одну из пицц, он размещает заказ. В этом контексте меню, пицца, покупатель и заказ выглядят как хорошие кандидаты на ресурсы. Начнем с заказа.
Следующим шагом будет присвоение URL-адресов ресурсу. Есть много возможностей, но, к счастью, соглашения REST дают некоторые рекомендации. В типичном REST API ресурсу будут назначены два шаблона URL. Первый — это множественное число от имени ресурса, например
/orders . Второй — это множественное число от имени ресурса плюс уникальный идентификатор для указания одного ресурса, например
/orders/<order_id>, где
<order_id> — уникальный идентификатор для заказа. Эти два шаблона URL составляют первые
конечные точки (endpoints), которые будет поддерживать наш API. Они называются конечными точками просто потому, что они идут в конце URL-адреса, как в
http://example.com/<endpoint_goes_here>.
Теперь, когда мы выбрали ресурс и присвоили ему URL-адреса, нам нужно решить, какие действия может выполнять клиент. Следуя соглашениям REST, мы говорим, что конечная точка множественного числа (
/orders) предназначена для перечисления существующих заказов и создания новых. Множественное число с уникальным идентификатором конечной точки (
/orders/<order_id>) предназначено для извлечения, обновления или отмены определенного заказа. Клиент сообщает серверу, какое действие следует выполнить, передавая в запросе соответствующую команду HTTP (GET, POST, PUT или DELETE).
В целом наш API теперь выглядит так: