0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В спецификации HTTP есть много правил и рекомендаций, но их все равно недостаточно для построения полноценного API.</p>
1
<p>В спецификации HTTP есть много правил и рекомендаций, но их все равно недостаточно для построения полноценного API.</p>
2
<p>Есть множество вопросов, на которые спецификация HTTP не отвечает:</p>
2
<p>Есть множество вопросов, на которые спецификация HTTP не отвечает:</p>
3
<ul><li>Как строить URL?</li>
3
<ul><li>Как строить URL?</li>
4
<li>Как работать с ошибками?</li>
4
<li>Как работать с ошибками?</li>
5
<li>В каком формате и какой структуры возвращать данные?</li>
5
<li>В каком формате и какой структуры возвращать данные?</li>
6
<li>Как делать пагинацию?</li>
6
<li>Как делать пагинацию?</li>
7
</ul><p>Именно поэтому для построения хорошего API недостаточно правил HTTP. Нужны дополнительные соглашения, которые мы изучим в этом уроке.</p>
7
</ul><p>Именно поэтому для построения хорошего API недостаточно правил HTTP. Нужны дополнительные соглашения, которые мы изучим в этом уроке.</p>
8
<p>За время существования интернета было создано немало стандартов API. Среди них можно выделить несколько больших направлений, которые строятся по примерно одинаковым правилам.</p>
8
<p>За время существования интернета было создано немало стандартов API. Среди них можно выделить несколько больших направлений, которые строятся по примерно одинаковым правилам.</p>
9
<p>Ниже мы рассмотрим их подробнее, а пока просто познакомимся с ними:</p>
9
<p>Ниже мы рассмотрим их подробнее, а пока просто познакомимся с ними:</p>
10
<h2>API по принципу "как придется"</h2>
10
<h2>API по принципу "как придется"</h2>
11
<p>Сюда попадают все API, которые делают по принципу "как получится". Обычно они встречаются во внутренних сервисах или публичных старых сервисах, созданных десятки лет назад.</p>
11
<p>Сюда попадают все API, которые делают по принципу "как получится". Обычно они встречаются во внутренних сервисах или публичных старых сервисах, созданных десятки лет назад.</p>
12
<p>Здесь нет никаких правил:</p>
12
<p>Здесь нет никаких правил:</p>
13
<ul><li>каждый эндпоинт существует сам по себе</li>
13
<ul><li>каждый эндпоинт существует сам по себе</li>
14
<li>активно используются параметры запроса</li>
14
<li>активно используются параметры запроса</li>
15
<li>игнорируются коды ответа и другие возможности самого HTTP</li>
15
<li>игнорируются коды ответа и другие возможности самого HTTP</li>
16
</ul><p>В теории такие API делать не стоит, но на практике они иногда встречаются.</p>
16
</ul><p>В теории такие API делать не стоит, но на практике они иногда встречаются.</p>
17
<h2>Архитектурный стиль REST</h2>
17
<h2>Архитектурный стиль REST</h2>
18
<p>REST - это архитектурный стиль, который был заложен в сам протокол HTTP, ведь его придумал один из создателей HTTP.</p>
18
<p>REST - это архитектурный стиль, который был заложен в сам протокол HTTP, ведь его придумал один из создателей HTTP.</p>
19
<p>API, построенный по этому принципу, вовсю использует возможности HTTP. Такое API активно опирается на заголовки, коды ответов, грамотно созданные эндпоинты. Например,<a>Example Api</a>построен по принципам REST.</p>
19
<p>API, построенный по этому принципу, вовсю использует возможности HTTP. Такое API активно опирается на заголовки, коды ответов, грамотно созданные эндпоинты. Например,<a>Example Api</a>построен по принципам REST.</p>
20
<p>Можно сказать, что глобальная идея REST - использовать для проектирования API возможности, заложенные в HTTP изначально:</p>
20
<p>Можно сказать, что глобальная идея REST - использовать для проектирования API возможности, заложенные в HTTP изначально:</p>
21
<p>Однако REST не отвечает на те вопросы из начала урока. REST - это архитектурный стиль, а не конкретный стандарт. В эндпоинтах выше мы видим адреса и методы HTTP, но мы не знаем, какими будут данные в запросах и в ответах. Поэтому любое REST API имеет свои особенности, которые присущи только ему - у него есть свой способ обработки ошибок и своя структура возвращаемых данных.</p>
21
<p>Однако REST не отвечает на те вопросы из начала урока. REST - это архитектурный стиль, а не конкретный стандарт. В эндпоинтах выше мы видим адреса и методы HTTP, но мы не знаем, какими будут данные в запросах и в ответах. Поэтому любое REST API имеет свои особенности, которые присущи только ему - у него есть свой способ обработки ошибок и своя структура возвращаемых данных.</p>
22
<p>Разработчики пытаются создать стандарт, который добавляет в REST все недостающие части. Самый удачный пример -<a>json</a></p>
22
<p>Разработчики пытаются создать стандарт, который добавляет в REST все недостающие части. Самый удачный пример -<a>json</a></p>
23
<p>. Этот стандарт описывает конкретные структуры данных для разных типов запросов и ответов. Так может выглядеть извлечение конкретного пользователя:</p>
23
<p>. Этот стандарт описывает конкретные структуры данных для разных типов запросов и ответов. Так может выглядеть извлечение конкретного пользователя:</p>
24
<h2>Удаленный вызов процедур (Remote Procedure Call, RPC)</h2>
24
<h2>Удаленный вызов процедур (Remote Procedure Call, RPC)</h2>
25
<p>RPC API появились в интернете практически раньше всех остальных видов API. Здесь HTTP рассматривается как способ доставки API, но сам по себе не является частью API.</p>
25
<p>RPC API появились в интернете практически раньше всех остальных видов API. Здесь HTTP рассматривается как способ доставки API, но сам по себе не является частью API.</p>
26
<p>Как правило, RPC API работают с одним эндпоинтом - например, /rpc, на который отправляется GET или POST. RPC API используют небольшое количество заголовков и кодов ответов. Обработка ошибок, выполнение разных действий - все это в RPC зашито в само тело запроса и ответа.</p>
26
<p>Как правило, RPC API работают с одним эндпоинтом - например, /rpc, на который отправляется GET или POST. RPC API используют небольшое количество заголовков и кодов ответов. Обработка ошибок, выполнение разных действий - все это в RPC зашито в само тело запроса и ответа.</p>
27
<p>Идея RPC в том, что мы просто вызываем обычные функции, а они каким-то магическим образом делают запросы на внешнюю систему, полностью или почти полностью скрывая от нас существование HTTP и сети в целом.</p>
27
<p>Идея RPC в том, что мы просто вызываем обычные функции, а они каким-то магическим образом делают запросы на внешнюю систему, полностью или почти полностью скрывая от нас существование HTTP и сети в целом.</p>
28
<p>Запрос в JSON-RPC выглядит как JSON, в котором указывается, какую функцию и с какими параметрами нужно вызвать:</p>
28
<p>Запрос в JSON-RPC выглядит как JSON, в котором указывается, какую функцию и с какими параметрами нужно вызвать:</p>
29
<p>В ответе приходит результат вызова этой функции:</p>
29
<p>В ответе приходит результат вызова этой функции:</p>
30
<p>Разновидностей RPC очень много, и они сильно отличаются между собой. Из наиболее известных можно назвать NFS, SOAP, XML-RPC, JSON-RPC, gRPC, GraphQL.</p>
30
<p>Разновидностей RPC очень много, и они сильно отличаются между собой. Из наиболее известных можно назвать NFS, SOAP, XML-RPC, JSON-RPC, gRPC, GraphQL.</p>
31
31