GetAnalyst - Навыки • Системный анализ • Бизнес-анализ
21.1K subscribers
2.27K photos
81 videos
231 files
1.29K links
Разбор задач на проектирование систем 🚀 Канал для системных аналитиков, бизнес-аналитиков, тестировщиков и менеджеров проектов

Админ @getanalyst
Сайт https://getanalyst.ru
Чат t.me/getanalystchat
Начинающим в IT @getanalyststart
Download Telegram
📡 Протокол 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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4213❤‍🔥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

Вопросы 👇👇👇
3
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥238❤‍🔥2👎1
🐞 Разбор квиза по REST API - ошибки, которые допускают из-за отсутствия насмотренности и опыта 🐞

Пару дней назад я опубликовала вопросы с подвохами по 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🔥64🤩1