📡 Протокол HTTP, HTTP API и его связь с REST API 📡
📌 HTTP — это протокол прикладного уровня, по которому клиент и сервер обмениваются запросами и ответами.
👉 Базовая структура HTTP API-запроса и ответа
(без архитектурного стиля REST)
Запрос:
+ HTTP-метод (GET / POST / PUT / PATCH / DELETE)
+ URL (https://api.test.com/public/v1/products?name=Яблоко&limit=10)
+ заголовки (headers)
+ тело запроса (json/xml/html/файл и др.)
Ответ:
+ HTTP статус код (200, 400, 404, 500 и др.)
+ заголовки (headers)
+ тело ответа (json/xml/html/файл и др.)
📌 REST API — это архитектурный стиль, использующий HTTP в качестве протокола передачи данных (основанный на протоколе HTTP).
👉 То есть REST API использует ту же базовую структуру HTTP-запросов и ответов.
Но добавляет рекомендации к тому, как именно проектировать API.
Например:
▫️ в REST API обычно стараются использовать HTTP-методы по назначению:
GET — чтение, POST — создание, PUT/PATCH — изменение, DELETE — удаление
▫️ в REST API обычно строят URL вокруг ресурсов, а не действий.
Для изменения продукта:
PUT /products/{id} - хорошо для REST API
POST /updateProduct/{id} - плохо для REST, хорошо для HTTP API
▫️ на практике REST API чаще всего использует JSON, хотя сам REST этого строго не требует
▫️ если в API все методы сделаны через POST, это HTTP API, но не REST
Всё самое важное про HTTP — на картинках к посту ☝️
🔗 Подробнее про связь HTTP и REST API — в статье по ссылке
#RestApiGA
📱 Tg | 💙 ВК | 💬 Max
📌 HTTP — это протокол прикладного уровня, по которому клиент и сервер обмениваются запросами и ответами.
👉 Базовая структура HTTP API-запроса и ответа
(без архитектурного стиля REST)
Запрос:
+ HTTP-метод (GET / POST / PUT / PATCH / DELETE)
+ URL (https://api.test.com/public/v1/products?name=Яблоко&limit=10)
+ заголовки (headers)
+ тело запроса (json/xml/html/файл и др.)
Ответ:
+ HTTP статус код (200, 400, 404, 500 и др.)
+ заголовки (headers)
+ тело ответа (json/xml/html/файл и др.)
📌 REST API — это архитектурный стиль, использующий HTTP в качестве протокола передачи данных (основанный на протоколе HTTP).
👉 То есть REST API использует ту же базовую структуру HTTP-запросов и ответов.
Но добавляет рекомендации к тому, как именно проектировать API.
Например:
▫️ в REST API обычно стараются использовать HTTP-методы по назначению:
GET — чтение, POST — создание, PUT/PATCH — изменение, DELETE — удаление
▫️ в REST API обычно строят URL вокруг ресурсов, а не действий.
Для изменения продукта:
PUT /products/{id} - хорошо для REST API
POST /updateProduct/{id} - плохо для REST, хорошо для HTTP API
▫️ на практике REST API чаще всего использует JSON, хотя сам REST этого строго не требует
▫️ если в API все методы сделаны через POST, это HTTP API, но не REST
Всё самое важное про HTTP — на картинках к посту ☝️
🔗 Подробнее про связь HTTP и REST API — в статье по ссылке
#RestApiGA
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍8🥰1😁1
🐾 Новый проект по REST API и GraphQL: cистема для ветеринарных клиник #VetCareGA 🐾
В ближайший месяц будем проектировать приложение, в котором владелец питомца сможет записывать его на приём к ветеринару и следить за его здоровьем: получать результаты анализов, рекомендации по питанию, назначения и другую важную информацию.
Важно учесть:
+ один пользователь может иметь несколько питомцев
+ ограничения по слотам записи
+ статусы записи: новая, оплачена, проведена, отменена
+ врачей разных специализаций
Спроектируем 👉REST API методы для процессов:
✅ запись питомца на приём
✅ отмена записи
✅ история записей
И отдельно покажу, как эти же сценарии можно было бы реализовать через 👉GraphQL.
📌 План:
1. Проектирование:
+ endpoint-ы и методы
+ headers
+ JSON запросов и ответов
+ алгоритмы работы
+ обработка ошибок
2. Документация:
+ постановки задач на REST API и GraphQL методы в Confluence
+ схема БД и дизайн UI/UX
+ маппинг данных: JSON - БД
3. Инструменты:
Посмотрим, как работать с REST API и GraphQL в Postman, Insomnia и Swagger (OpenAPI).
📌 В результате:
▫️ несколько постановок задач по REST API в Confluence
▫️ примеры GraphQL как альтернативы
▫️ схема БД
▫️ дизайн ключевых экранов
▫️ интерактивная документация в Postman
🎯 Кому актуален проект?
🔹 работаете аналитиком и хотите прокачать навыки работы с Backend
🔹 у вас на горизонте задачи по бронированиям, CRM или личным кабинетам
🔹 хотите научиться оформлять требования к API
🤝 Хотите участвовать и получать новый опыт в REST API и GraphQL для работы и собеседований?
Подписывайтесь на @getanalysts и следите за тегом #VetCareGA.
Добро пожаловать в команду!
#RestApiGA
📱 Tg | 💙 ВК | 💬 Max
В ближайший месяц будем проектировать приложение, в котором владелец питомца сможет записывать его на приём к ветеринару и следить за его здоровьем: получать результаты анализов, рекомендации по питанию, назначения и другую важную информацию.
Важно учесть:
+ один пользователь может иметь несколько питомцев
+ ограничения по слотам записи
+ статусы записи: новая, оплачена, проведена, отменена
+ врачей разных специализаций
Спроектируем 👉REST API методы для процессов:
✅ запись питомца на приём
✅ отмена записи
✅ история записей
И отдельно покажу, как эти же сценарии можно было бы реализовать через 👉GraphQL.
📌 План:
1. Проектирование:
+ endpoint-ы и методы
+ headers
+ JSON запросов и ответов
+ алгоритмы работы
+ обработка ошибок
2. Документация:
+ постановки задач на REST API и GraphQL методы в Confluence
+ схема БД и дизайн UI/UX
+ маппинг данных: JSON - БД
3. Инструменты:
Посмотрим, как работать с REST API и GraphQL в Postman, Insomnia и Swagger (OpenAPI).
📌 В результате:
▫️ несколько постановок задач по REST API в Confluence
▫️ примеры GraphQL как альтернативы
▫️ схема БД
▫️ дизайн ключевых экранов
▫️ интерактивная документация в Postman
🔹 работаете аналитиком и хотите прокачать навыки работы с Backend
🔹 у вас на горизонте задачи по бронированиям, CRM или личным кабинетам
🔹 хотите научиться оформлять требования к API
🤝 Хотите участвовать и получать новый опыт в REST API и GraphQL для работы и собеседований?
Подписывайтесь на @getanalysts и следите за тегом #VetCareGA.
Добро пожаловать в команду!
#RestApiGA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42❤13❤🔥6👍3
🎲 Тест с подвохами по REST API и GraphQL: проверь себя за 3 минуты 🎲
REST API кажется простым ровно до того момента, пока не нужно спроектировать эндпоинты для новой системы с нуля.
Готовы "поймать грабли"? 🙈
Собрала для вас 4 вопроса с подвохом по проектированию API, которые будем разбирать на примере проекта #VetCareGA.
Проверим, насколько уверенно вы ориентируетесь в:
✔️ REST API и GraphQL
✔️ URL и эндпоинтах
Подсказки:
📚 Шпаргалка по методам: GET, POST, PUT, PATCH, DELETE
📚 Примеры API с разбором структуры методов
👉 Базовый URL: https://vetcarega.com/
👉 Версия API: v1
👉 В каждом вопросе может быть несколько правильных ответов — нужно выбрать все.
Разбор тестирования — в конце недели.
#VetCareGA #RestApiGA
Вопросы 👇👇👇
REST API кажется простым ровно до того момента, пока не нужно спроектировать эндпоинты для новой системы с нуля.
Готовы "поймать грабли"? 🙈
Собрала для вас 4 вопроса с подвохом по проектированию API, которые будем разбирать на примере проекта #VetCareGA.
Проверим, насколько уверенно вы ориентируетесь в:
✔️ REST API и GraphQL
✔️ URL и эндпоинтах
Подсказки:
📚 Шпаргалка по методам: GET, POST, PUT, PATCH, DELETE
📚 Примеры API с разбором структуры методов
👉 Базовый URL: https://vetcarega.com/
👉 Версия API: v1
👉 В каждом вопросе может быть несколько правильных ответов — нужно выбрать все.
Разбор тестирования — в конце недели.
#VetCareGA #RestApiGA
Вопросы 👇👇👇
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🦄2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🦄1
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄4👌3👍2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4😁4
REST_API_Структура_URL_эндпоинты_практическое_руководство_GetAnalyst.png
1.2 MB
💜 10 элементов URL в REST API: чек-лист с примерами 💜
Пример - редактировать карточку питомца:
PUT https://vetcare.com/api/public/v1/pets/{petId}
1️⃣ Метод HTTP
GET, POST, PUT, PATCH, DELETE
Не относится к URL, но связан с ним, т.к. вместе образуют эндпоинт.
Подробнее тут
2️⃣ Протокол
Для REST API всегда HTTP / HTTPs
3️⃣ Доменное имя
Основной адрес, по которому можно обращаться к серверу с API-приложением (backend)
Путь (Path)
Включает в себя один или несколько сегментов, разделённых слешами (/):
4️⃣ api - указатель на каталог API сервера, может быть в доменном имени
5️⃣ имя API (public) - указывает на конкретный интерфейс API, предназначенный для разных пользователей системы, либо для разных микросервисов
6️⃣ v1 - версия API, важна для поддержки совместимости с предыдущими версиями
Эндпоинт:
7️⃣ pets - это ресурс, к которому осуществляется доступ. В данном случае “питомец”. Может быть в единственном числе (pet)
8️⃣ {petId} - это параметр в пути URL (path-параметр), указывающий на конкретного питомца по его id в БД системы. Фигурные скобки {} обозначают переменную часть URL, значение которой должно быть предоставлено (например, идентификатор 126734)
+ 9️⃣ Иерархия с вложенными сущностями/действия над объектами
Примеры:
GET ../orders/(id}/payments - получить платеж(и) по заказу
PATCH ../users/(id}/block - заблокировать пользователя
+ 🔟 Query-параметры
Это дополнительные параметры после ?.
Они не являются обязательной частью URL.
Если параметров несколько, они перечисляются через символ &.
Обычно query-параметры используют для фильтрации, сортировки и пагинации при получении списков методом GET, но могут быть и в других методах.
Пример - список ветеринаров:
GET …/vets?offset=0&limit=10&name=Иванов
👉 offset=0&limit=10 - запрос результатов с 0-го, 10 элементов на страницу. Это два отдельных query-параметра - элементы пагинации (постраничного получения данных)
👉 name - фильтр по имени ветеринара
Благодаря такой структуре разработчикам и пользователям API проще понять, что делает метод, с каким ресурсом он работает и какие данные от него ожидать.
К посту прикрепила наглядный практический гайд с дополнительными примерами — забирайте себе как шпаргалку для работы и собеседований 📚🔖
#RestApiGA #VetCareGA
📱 Tg | 💙 ВК | 💬 Max
Пример - редактировать карточку питомца:
PUT https://vetcare.com/api/public/v1/pets/{petId}
1️⃣ Метод HTTP
GET, POST, PUT, PATCH, DELETE
Не относится к URL, но связан с ним, т.к. вместе образуют эндпоинт.
Подробнее тут
2️⃣ Протокол
Для REST API всегда HTTP / HTTPs
3️⃣ Доменное имя
Основной адрес, по которому можно обращаться к серверу с API-приложением (backend)
Путь (Path)
Включает в себя один или несколько сегментов, разделённых слешами (/):
4️⃣ api - указатель на каталог API сервера, может быть в доменном имени
5️⃣ имя API (public) - указывает на конкретный интерфейс API, предназначенный для разных пользователей системы, либо для разных микросервисов
6️⃣ v1 - версия API, важна для поддержки совместимости с предыдущими версиями
Эндпоинт:
7️⃣ pets - это ресурс, к которому осуществляется доступ. В данном случае “питомец”. Может быть в единственном числе (pet)
8️⃣ {petId} - это параметр в пути URL (path-параметр), указывающий на конкретного питомца по его id в БД системы. Фигурные скобки {} обозначают переменную часть URL, значение которой должно быть предоставлено (например, идентификатор 126734)
+ 9️⃣ Иерархия с вложенными сущностями/действия над объектами
Примеры:
GET ../orders/(id}/payments - получить платеж(и) по заказу
PATCH ../users/(id}/block - заблокировать пользователя
+ 🔟 Query-параметры
Это дополнительные параметры после ?.
Они не являются обязательной частью URL.
Если параметров несколько, они перечисляются через символ &.
Обычно query-параметры используют для фильтрации, сортировки и пагинации при получении списков методом GET, но могут быть и в других методах.
Пример - список ветеринаров:
GET …/vets?offset=0&limit=10&name=Иванов
👉 offset=0&limit=10 - запрос результатов с 0-го, 10 элементов на страницу. Это два отдельных query-параметра - элементы пагинации (постраничного получения данных)
👉 name - фильтр по имени ветеринара
Благодаря такой структуре разработчикам и пользователям API проще понять, что делает метод, с каким ресурсом он работает и какие данные от него ожидать.
К посту прикрепила наглядный практический гайд с дополнительными примерами — забирайте себе как шпаргалку для работы и собеседований 📚
#RestApiGA #VetCareGA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤8❤🔥2👎1
🐞 Разбор квиза по REST API - ошибки, которые допускают из-за отсутствия насмотренности и опыта 🐞
Пару дней назад я опубликовала вопросы с подвохами по REST API.
✅ Результаты тут
Как всегда, вижу сильный перекос голосов в сторону:
«а давайте всё сделаем через POST» 🙃
Но прежде чем вы начнёте спорить в комментариях, хочу сразу показать простой CRUD на примере управления данными о записи на приём к ветеринару.
Если это HTTP API без REST-подхода, то может получиться так:
Почему это не REST?
❌ В URL используются глаголы, хотя их роль уже могут выполнять HTTP-методы: GET, POST, PUT, PATCH, DELETE.
Если делаете REST API, то запись того же CRUD будет выглядеть так:
Почему это ближе к REST?
✅ В URL нет лишних глаголов.
✅ Действие определяется HTTP-методом.
✅ URL описывает ресурс, а не команду.
*public — это название API. Его можно опустить, но на практике часто полезно сохранять, особенно в микросервисной архитектуре.
❗️Главное правило перед проектированием эндпоинтов RESTful API:
сначала распишите полный набор операций для одного ресурса по CRUD и проверьте, чтобы не было конструкций вроде: POST /objects/create.
Потому что здесь уже возникает дублирование смысла: POST = create, а create ещё раз написан в URL.
Итого, ключевые ошибки в тестировании:
👉 1. Запись на приём
Большинство выбрали верный вариант.
Но много голосов было и за:
❌ POST /appointments/create - это "масло-маслянное"
❌ POST /appointments/{id} - откуда возьмете id? он же присваивается после создания записи на сервере, в БД
👉 2. История записей
По сути это обычное получение списка записей на приём.
Большинство выбрали корректные варианты, но здесь важно помнить ещё одну вещь:
❗️В идеале нужно было в предложенных решениях добавить названия API:
А я их благополучно скрыла от вас.
👉 3. Отмена записи
За DELETE - большинство голосов.
Но отмена записи — это чаще не удаление строки из БД, а изменение статуса.
Поэтому более точный вариант здесь — PATCH, если мы, например, меняем статус записи на cancelled.
DELETE иногда тоже встречается, но с точки зрения бизнес-смысла PATCH здесь обычно аккуратнее.
📌 Почему "все POST" это не REST?
“всё через POST” не доказывает автоматически, что API не REST,
но очень часто означает, что API игнорирует стандартную семантику HTTP и уходит в сторону RPC over HTTP — этот вывод следует из сочетания RFC 9110 и диссертации Филдинга
▫️ HTTP требует уважать семантику методов — RFC 9110
▫️ REST определяется наличием uniform interface и hypermedia constraints — Филдинг, 5.1.5 - “REST APIs must be hypertext-driven”.
Подробный разбор каждого варианта — на картинках к посту 🤝
🖼 Исходники картинок
Полезные материалы, связанные с решением:
📚 Шпаргалка по методам: GET, POST, PUT, PATCH, DELETE
📚 Примеры API с разбором структуры методов
📚 Структура URL в REST API
🩵 Проектирование REST API: спорные вопросы с проектов и собеседований на системного аналитика (и не только)
Пример HTTP API:
https://www.unisender.com/ru/support/api/common/bulk-email/
Пример REST API:
https://developers.avito.ru/api-catalog/job/documentation#operation/applicationsGetIds
#RestApiGA #VetCareGA (Tg | ВК | Max)
Пару дней назад я опубликовала вопросы с подвохами по REST API.
✅ Результаты тут
Как всегда, вижу сильный перекос голосов в сторону:
«а давайте всё сделаем через POST» 🙃
Но прежде чем вы начнёте спорить в комментариях, хочу сразу показать простой CRUD на примере управления данными о записи на приём к ветеринару.
Если это HTTP API без REST-подхода, то может получиться так:
POST /api/public/v1/appointments/create - создать запись
POST /api/public/v1/appointments/{id} - получить запись по id
POST /api/public/v1/appointments/list - получить список записей
POST /api/public/v1/appointments/{id}/update - редактировать запись (отменить)
POST /api/public/v1/appointment/{id}/delete - удалить запись
Почему это не REST?
❌ В URL используются глаголы, хотя их роль уже могут выполнять HTTP-методы: GET, POST, PUT, PATCH, DELETE.
Если делаете REST API, то запись того же CRUD будет выглядеть так:
POST /api/public/v1/appointments - создать запись
GET /api/public/v1/appointments/{id} - получить запись по id
GET /api/public/v1/appointments - получить список записей, не конкретная по id
PATCH /api/public/v1/appointments/{id} - редактировать запись (отменить)
DELETE /api/public/v1/appointments/{id} - удалить запись
Почему это ближе к REST?
✅ В URL нет лишних глаголов.
✅ Действие определяется HTTP-методом.
✅ URL описывает ресурс, а не команду.
*public — это название API. Его можно опустить, но на практике часто полезно сохранять, особенно в микросервисной архитектуре.
❗️Главное правило перед проектированием эндпоинтов RESTful API:
сначала распишите полный набор операций для одного ресурса по CRUD и проверьте, чтобы не было конструкций вроде: POST /objects/create.
Потому что здесь уже возникает дублирование смысла: POST = create, а create ещё раз написан в URL.
Это минимальное, чтобы уйти от HTTP API в сторону REST-а.
Итого, ключевые ошибки в тестировании:
👉 1. Запись на приём
Большинство выбрали верный вариант.
Но много голосов было и за:
❌ POST /appointments/create - это "масло-маслянное"
❌ POST /appointments/{id} - откуда возьмете id? он же присваивается после создания записи на сервере, в БД
👉 2. История записей
По сути это обычное получение списка записей на приём.
Большинство выбрали корректные варианты, но здесь важно помнить ещё одну вещь:
❗️В идеале нужно было в предложенных решениях добавить названия API:
/api/admin/v1
/api/public/v1
А я их благополучно скрыла от вас.
👉 3. Отмена записи
За DELETE - большинство голосов.
Но отмена записи — это чаще не удаление строки из БД, а изменение статуса.
Поэтому более точный вариант здесь — PATCH, если мы, например, меняем статус записи на cancelled.
DELETE иногда тоже встречается, но с точки зрения бизнес-смысла PATCH здесь обычно аккуратнее.
📌 Почему "все POST" это не REST?
“всё через POST” не доказывает автоматически, что API не REST,
но очень часто означает, что API игнорирует стандартную семантику HTTP и уходит в сторону RPC over HTTP — этот вывод следует из сочетания RFC 9110 и диссертации Филдинга
▫️ HTTP требует уважать семантику методов — RFC 9110
▫️ REST определяется наличием uniform interface и hypermedia constraints — Филдинг, 5.1.5 - “REST APIs must be hypertext-driven”.
Подробный разбор каждого варианта — на картинках к посту 🤝
🖼 Исходники картинок
Полезные материалы, связанные с решением:
📚 Шпаргалка по методам: GET, POST, PUT, PATCH, DELETE
📚 Примеры API с разбором структуры методов
📚 Структура URL в REST API
🩵 Проектирование REST API: спорные вопросы с проектов и собеседований на системного аналитика (и не только)
Пример HTTP API:
https://www.unisender.com/ru/support/api/common/bulk-email/
Пример REST API:
https://developers.avito.ru/api-catalog/job/documentation#operation/applicationsGetIds
#RestApiGA #VetCareGA (Tg | ВК | Max)
❤13🔥6⚡4🤩1