Каковы 6 характеристик REST API?
Архитектура REST API была предложена доктором Роем Филдингом в его докторской диссертации 2000 года. Эта архитектура существует уже около 23 лет, и большинство популярных API следуют ей. Несмотря на столь широкое распространение, большинство программистов до сих пор не знают о шести основных характеристиках, определяющих REST или RESTful API.
Убедиться в том, что вы не относитесь к числу таких программистов, можно, ознакомившись со 180-страничной диссертацией доктора Филдинга. А еще лучше потратить несколько минут на чтение этой статьи, в которой мы рассмотрим этот список характеристик и обсудим, почему каждая из них важна. Уверяем вас, что последний вариант более интересен и экономичен по времени.
Основы REST API
Прежде чем мы перейдем к рассмотрению шести характеристик, полезно понять, как работают REST API. Не стесняйтесь пропустить этот раздел, если вы уже использовали REST API ранее.
Архитектура REST (и, в свою очередь, REST API) опирается на концепцию ресурсов. Ресурсом могут быть любые данные, хранящиеся на сервере. Для Facebook таким ресурсом могут быть обновления статуса. Аналогично для Twitter ресурсом могут быть твиты. Вы выполняете действия над этими ресурсами. Более того, каждый ресурс имеет специальную конечную точку, которая позволяет взаимодействовать с ресурсом (читать, удалять, обновлять и т.д.).
В REST API существует четыре основных типа запросов. Поскольку REST построен на основе HTTP, эти типы также основаны на уже существующих HTTP-главах:
- GET: Используется для получения информации с сервера. Запрос GET не должен изменять состояние сервера и обычно используется для получения представления ресурса.
- POST: Используется для отправки информации на сервер. Запрос POST обычно используется для создания нового или обновления существующего ресурса.
- PUT: Используется для обновления существующего ресурса. Запрос PUT должен полностью заменить текущее представление ресурса на то, которое указано в запросе.
- DELETE: используется для удаления ресурса. Запрос DELETE должен удалить указанный ресурс с сервера.
Шесть характеристик REST
REST был создан для удовлетворения потребностей в масштабируемых и производительных веб-сервисах. Именно поэтому в REST особое внимание уделяется тому, чтобы API, созданные на основе этой архитектуры, следовали определенным принципам, которые помогают им оставаться производительными, высокодоступными, расширяемыми и легко масштабируемыми. Эти принципы в совокупности образуют шесть характеристик REST API. Давайте рассмотрим их:
1. Клиент-серверная архитектура
RESTful API строятся по принципу клиент-серверной архитектуры, т.е. клиент посылает запрос на сервер, а сервер - ответ. В качестве клиента может выступать любое устройство или приложение, способное выполнять HTTP-запросы, а в качестве сервера - приложение, предоставляющее API и отвечающее на запросы клиентов. Эта характеристика позволяет разделить задачи, облегчая разработку, поддержку и масштабирование обоих компонентов независимо друг от друга.
2. Нестационарность
RESTful API являются статическими, т.е. каждый запрос клиента к серверу содержит всю информацию, необходимую серверу для выполнения запроса, без учета предыдущих запросов или хранилища на стороне сервера. Именно поэтому каждый аутентифицированный REST-запрос должен содержать маркер аутентификации в заголовках запроса.
Это увеличивает размер запроса, но позволяет серверу масштабироваться, не беспокоясь о хранении информации о состоянии в двух отдельных запросах.

3. Кэшируемость
Важно использовать методы снижения нагрузки на сервер. Поэтому в RESTful API реализовано определенное кэширование. Это означает, что ответы API могут кэшироваться клиентом, что позволяет ускорить время отклика при последующих запросах на тот же ресурс. Это снижает нагрузку на сервер и повышает производительность, поскольку серверу не нужно генерировать один и тот же ответ для каждого запроса.
Поскольку каждый запрос в REST должен нести токены аутентификации и соответствующее состояние, необходимое для работы сервера, преимущества этой характеристики становятся заметны довольно быстро для любого API с приличным трафиком. Даже при таймауте кэша в 5 с можно предотвратить тысячи или миллионы запросов в течение нескольких секунд.
4. Многослойная система
Перспективные API должны быть модульными, и каждый модуль должен быть обновляемым или заменяемым прозрачно. Следовательно, REST требует, чтобы API были спроектированы как многоуровневая система, где клиент взаимодействует с сервером через одну конечную точку, а сервер может взаимодействовать с несколькими внутренними системами. Это обеспечивает разделение проблем и позволяет добавлять новые внутренние системы, изменять существующие или выполнять их обслуживание без ущерба для клиента. Примером может служить то, как сервер может обновить механизм балансировки нагрузки, но клиенту об этом сообщать не нужно. Клиент может продолжать взаимодействие так же, как и раньше.
5. Код по запросу
Это необязательная характеристика, поскольку она может привести к нежелательным побочным эффектам и эксплойтам. Данная характеристика означает, что вместо данных сервер может передавать клиенту код для выполнения. Это может помочь расширить функциональность клиента и привести к более динамичному и настраиваемому взаимодействию. Однако это также требует, чтобы клиент мог понять и выполнить код, который сервер отправляет обратно. Поэтому частота использования данной характеристики снижается. Более того, если сервер взломан, то автоматически взламываются и клиенты, поскольку они будут выполнять то, что ответит сервер. Эта очевидная проблема безопасности также препятствует внедрению Code-On-Demand.
6. Унифицированный интерфейс
Это означает, что API использует общий набор методов, таких как GET, POST, PUT и DELETE, для доступа к ресурсам, а также стандартный формат, например JSON или XML, для запросов и ответов. Это облегчает понимание и взаимодействие клиентов с API, поскольку доступ ко всем ресурсам осуществляется единообразно. Единый интерфейс также облегчает реализацию версионности API, поскольку новые функции могут быть добавлены путем определения новых ресурсов и методов, не затрагивая существующие.
Заключение
Это был краткий обзор шести характеристик, определяющих, какие API можно считать RESTful. Для использования RESTful API не обязательно знать о них, но полезно понимать предпосылки и ход мысли, по которым REST API реализуются таким образом. Это позволит вам использовать их более эффективно.
Прежде чем отпустить вас, было бы неправильно не упомянуть о нашем собственном RESTful API, который помогает разработчикам парсить веб-сайты и извлекать необходимые данные, не подвергаясь блокировке. Изучите нашу обширную документацию, воспользуйтесь нашим щедрым бесплатным месячным планом и узнайте больше о REST и API.


