👩💻 6 принципов REST API про которые спрашивают на собеседованиях 👩💻
REST API — архитектурный стиль для создания веб-сервисов, основанный на протоколе HTTP.
REST API основан на протоколе HTTP:
это означает, что все принципы работы HTTP методов, их структура запросов и ответов, будут также применимы и для REST API.
👉 Подробнее про работу HTTP-протокола и его связь с REST API разбирали в этой статье.
Пример:
+ в HTTP есть виды методов: GET, POST, PUT, PATCH и т.д.
+ в REST API методы абсолютно те же.
Архитектурный стиль REST добавляет к HTTP дополнительные правила и принципы, по которым должен происходить обмен данными👇
Главные принципы REST:
1. Строгое разделение клиента и сервера
2. Единый интерфейс
3. Без сохранения состояния (Stateless)
4. Многоуровневая система
5. Кэширование
6. Выполнение кода по запросу
В картинках к посту просто и с примерами разобрала эти принципы.
Это не самая ценная в работе информация, но перечень этих принципов и их понимание могут спрашивать на собеседованиях 👌 #hardGetAnalyst
REST API — архитектурный стиль для создания веб-сервисов, основанный на протоколе HTTP.
REST API основан на протоколе HTTP:
это означает, что все принципы работы HTTP методов, их структура запросов и ответов, будут также применимы и для REST API.
👉 Подробнее про работу HTTP-протокола и его связь с REST API разбирали в этой статье.
Пример:
+ в HTTP есть виды методов: GET, POST, PUT, PATCH и т.д.
+ в REST API методы абсолютно те же.
Архитектурный стиль REST добавляет к HTTP дополнительные правила и принципы, по которым должен происходить обмен данными👇
Главные принципы REST:
1. Строгое разделение клиента и сервера
2. Единый интерфейс
3. Без сохранения состояния (Stateless)
4. Многоуровневая система
5. Кэширование
6. Выполнение кода по запросу
В картинках к посту просто и с примерами разобрала эти принципы.
Это не самая ценная в работе информация, но перечень этих принципов и их понимание могут спрашивать на собеседованиях 👌 #hardGetAnalyst
👍13❤5
GET, POST, PUT, PATCH и DELETE - виды методов, часть протокола HTTP.
Нужны, чтобы стандартизировать взаимодействие между клиентом и сервером.
Каждый метод выполняет определённое действие и соответствует логике CRUD-модели (Create, Read, Update, Delete).
🩷 GET
Чтение данных.
Не поддерживает тело - Body (JSON).
Идемпотентен.
💚 POST
Создание объектов в БД.
Не идемпотентен.
* Исключения, когда POST используют для чтения: сложные запросы с большим кол-вом фильтров, асинхронные операции.
* Почему в некоторых REST API все POST? Потому что они не REST API, а HTTP API.
💙 PUT
Полная замена и/или создание ресурса.
В теле JSON требует полный объект.
Идемпотентен.
* Часто используют только для изменения.
💜 PATCH
Частичное обновление ресурса.
В теле JSON передаются только те поля объекта, которые нужно изменить.
Не идемпотентен.
❤️ DELETE
Удаление ресурса.
Не поддерживает тело - Body (JSON).
Идемпотентен.
💛 А что по поводу TRACE, HEAD, OPTIONS, CONNECT?
Могут быть полностью заменены GET-ом.
Очень маленький шанс встретить или применить на практике.
Правильное использование HTTP-методов в REST API упрощает взаимодействие с вашей системой, так как делает API предсказуемым и удобным для разработчиков.
P.S. Ссылка на подкаст про идемпотентность и коммутативность в API #hardGetAnalyst
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15😍1
Forwarded from 👩🏻💻 Подкаст Системных Аналитиков | GetAnalyst
🤖 Как аналитики работают в Generative AI проектах: старт карьеры, ключевые навыки и задачи 🤖
Повсюду «AI, AI, AI»: Generative AI, LLM, Fine-Tuning, RAG — но что это значит для системных и бизнес-аналитиков? Куда бежать, что изучать и с чего начать, если уже сейчас хочется новый виток в карьере в направлении AI?
В этом выпуске разбираем реальные проекты, задачи и роли в компании red_mad_robot: где место аналитика в Generative AI, какие навыки нужны на старте и как меняется работа команд по сравнению с «обычными» IT-проектами.
🔗 Сайт эпизода
🔗 Компания red_mad_robot
🔗 AI акселератор для СА и БА
Анастасия и Игорь «раскрывают кухню» Generative AI-проектов: RAG vs Fine-Tuning, Small LLMs, метрики качества, безопасность и свой реальный опыт работы. К концу эпизода вы поймёте, с чего начать переход, какие артефакты добавить в портфолио и чего ожидать на собеседованиях.
✍️ Слушайте, делайте заметки и задавайте вопросы в комментариях, чтобы мы могли дать вам максимум пользы от этого выпуска!
Эпизод доступен в:
⏯ Apple Podcast
⏯ Яндекс.Музыка
⏯ Telegram
⏯ Castbox
⏯ Звук
⏯ Spotify
⏯ RuTube
⏯ YouTube
⏯ VK Video
GetAnalyst - сообщество, где аналитики каждый день получают новый опыт и самые актуальные знания! 🚀
Повсюду «AI, AI, AI»: Generative AI, LLM, Fine-Tuning, RAG — но что это значит для системных и бизнес-аналитиков? Куда бежать, что изучать и с чего начать, если уже сейчас хочется новый виток в карьере в направлении AI?
В этом выпуске разбираем реальные проекты, задачи и роли в компании red_mad_robot: где место аналитика в Generative AI, какие навыки нужны на старте и как меняется работа команд по сравнению с «обычными» IT-проектами.
Анастасия и Игорь «раскрывают кухню» Generative AI-проектов: RAG vs Fine-Tuning, Small LLMs, метрики качества, безопасность и свой реальный опыт работы. К концу эпизода вы поймёте, с чего начать переход, какие артефакты добавить в портфолио и чего ожидать на собеседованиях.
✍️ Слушайте, делайте заметки и задавайте вопросы в комментариях, чтобы мы могли дать вам максимум пользы от этого выпуска!
Эпизод доступен в:
⏯ Apple Podcast
⏯ Яндекс.Музыка
⏯ Telegram
⏯ Castbox
⏯ Звук
⏯ Spotify
⏯ RuTube
⏯ YouTube
⏯ VK Video
GetAnalyst - сообщество, где аналитики каждый день получают новый опыт и самые актуальные знания! 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Проектирование REST API - это процесс создания дизайна методов обмена данными. Дизайн - это субъективное. У одних "так", у других "сяк". А кто прав? Иногда все, а иногда нет.
В следующих постах рассмотрим спорные вопросы с проектов и собеседований, которые связаны с созданием контрактов REST API.
Вопросы взяли по итогам общения с системными аналитиками, которые недавно проходили собеседования, с открытого вебинара GetAnalyst.
✅ Но для начала повторим, что такое REST API и для чего.
REST API - это архитектурный стиль, который определяет, по каким правилам приложения должны обмениваться данными между собой. Он используется для создания веб-сервисов, мобильных приложений, интеграционных платформ и других IT-решений.
Впервые был определен и описан Роем Филдингом в диссертации 2000-го года. Рой Филдинг - соавтор спецификаций HTTP и URI.
Главная цель REST API - облегчить передачу и управление информацией между разными системами: создавать, читать, изменять, удалять (CRUD). REST API использует для этого стандартные HTTP-запросы: GET, POST, PUT, DELETE и другие.
🔹 REST API - это архитектурный стиль проектирования взаимодействия приложений.
🔹 HTTP - протокол, на основе которого работает REST API.
Отличие REST API от других видов API, таких как SOAP API, ftp и RPC, заключается в том, что REST API не имеет жестких правил и структур, и может быть использован с любым языком программирования - Java, Python, C++ и другие.
Из-за того, что REST API не имеет жестких правил и структур, и возникают спорные вопросы, связанные с его проектированием. #hardGetAnalyst
⬇️ Первый вопрос рассмотрим в следующем посте⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 Можно ли использовать метод POST для получения данных?
Да, можно.
Метод POST изначально предназначен для отправки данных на сервер с целью их обработки и создания новых записей в БД. В то же время его можно использовать для получение данных в следующих случаях:
1️⃣ Запросы на получение данных (списки объектов) с большим количеством фильтров
Когда необходимо реализовать большое количество фильтров для получения списка, то решение отправлять их все в URL запроса как query-параметры не лучшее, т.к. это делает URL очень длинным. Это может вызвать проблемы с ограничениями на длину URL в некоторых веб-серверах или браузерах.
Кроме того, сложные и многочисленные параметры в URL могут затруднить читаемость и понимание запроса для других разработчиков и пользователей API.
Пример:
Допустим, у нас есть API для получения списка книг из базы данных. Пользователь может фильтровать этот список по автору, жанру, году публикации, издательству, рейтингу и многим другим параметрам. Если пытаться передать все эти фильтры в URL, то он может выглядеть так:
Такой подход делает URL громоздким и может привести к превышению ограничения на длину URL, особенно если захочется добавить еще больше фильтров.
Вместо этого, можно использовать метод POST для передачи всех этих параметров в теле запроса в формате JSON:
Такой подход делает запрос более структурированным и читаемым, избегая проблем с длиной URL. Кроме того, это позволяет легко расширять список фильтров в будущем без страха ограничений.
В двух этих примерах результат будет идентичный: тело ответа со списком книг, отфильтрованных по заданным пользователем параметрам.
Стоит отметить, что при выборе метода POST для таких запросов, необходимо четко документировать это поведение в API-документации, чтобы избежать путаницы среди пользователей API.
2️⃣ Асинхронные запросы на получение данных: комбинирование POST и GET
Асинхронные запросы на получение данных реализуются за счет комбинации методов POST и GET.
Асинхронные запросы часто используются в ситуациях, когда необходимо обработать большой объем данных или когда процесс может занять длительное время. Это могут быть запросы на формирование отчетов или сложные поисковые запросы в системах-агрегаторах.
Реализуются асинхронные запросы последовательным использованием методов:
🔹 POST - используется для создания задачи на сервере. При получении такого запроса, сервер помещает задачу в очередь на обработку и возвращает идентификатор задачи.
🔹 GET - с помощью этого метода можно проверить статус выполнения задачи, используя идентификатор, предоставленный на предыдущем шаге. Как только задача завершена, через этот же метод можно получить результаты его выполнения.
Отчеты: В больших системах формирование отчетов может требовать обработки огромных объемов данных, что занимает много времени. Вместо ожидания окончания процесса, пользователь может отправить запрос на формирование отчета и вернуться к нему позже.
1. Пользователь отправляет POST-запрос для формирования отчета по продажам. При этом в теле запроса передаются параметры, необходимые для формирования отчета, такие как диапазон дат, тип отчета или другие фильтры.
После обработки этого запроса сервер создает задачу на формирование отчета и помещает ее в очередь.
Cервер возвращает идентификатор задачи. Этот уникальный идентификатор позволяет пользователю отслеживать статус формирования отчета.
Да, можно.
Метод POST изначально предназначен для отправки данных на сервер с целью их обработки и создания новых записей в БД. В то же время его можно использовать для получение данных в следующих случаях:
1️⃣ Запросы на получение данных (списки объектов) с большим количеством фильтров
Когда необходимо реализовать большое количество фильтров для получения списка, то решение отправлять их все в URL запроса как query-параметры не лучшее, т.к. это делает URL очень длинным. Это может вызвать проблемы с ограничениями на длину URL в некоторых веб-серверах или браузерах.
Кроме того, сложные и многочисленные параметры в URL могут затруднить читаемость и понимание запроса для других разработчиков и пользователей API.
Пример:
Допустим, у нас есть API для получения списка книг из базы данных. Пользователь может фильтровать этот список по автору, жанру, году публикации, издательству, рейтингу и многим другим параметрам. Если пытаться передать все эти фильтры в URL, то он может выглядеть так:
Метод "Получение списка книг с применением фильтров":
GET https://test-system.com/api/books?author=Толстой&genre=роман&year=1877&publisher=Огонек&rating=5&...
Такой подход делает URL громоздким и может привести к превышению ограничения на длину URL, особенно если захочется добавить еще больше фильтров.
Вместо этого, можно использовать метод POST для передачи всех этих параметров в теле запроса в формате JSON:
Метод "Создание поискового запроса на получение списка книг с применением фильтров":
POST https://test-system.com/api/books/search
{
"author": "Толстой",
"genre": "роман",
"year": 1877,
"publisher": "Огонек",
"rating": 5,
...
}
Такой подход делает запрос более структурированным и читаемым, избегая проблем с длиной URL. Кроме того, это позволяет легко расширять список фильтров в будущем без страха ограничений.
В двух этих примерах результат будет идентичный: тело ответа со списком книг, отфильтрованных по заданным пользователем параметрам.
Стоит отметить, что при выборе метода POST для таких запросов, необходимо четко документировать это поведение в API-документации, чтобы избежать путаницы среди пользователей API.
2️⃣ Асинхронные запросы на получение данных: комбинирование POST и GET
Асинхронные запросы на получение данных реализуются за счет комбинации методов POST и GET.
Асинхронные запросы часто используются в ситуациях, когда необходимо обработать большой объем данных или когда процесс может занять длительное время. Это могут быть запросы на формирование отчетов или сложные поисковые запросы в системах-агрегаторах.
Реализуются асинхронные запросы последовательным использованием методов:
🔹 POST - используется для создания задачи на сервере. При получении такого запроса, сервер помещает задачу в очередь на обработку и возвращает идентификатор задачи.
🔹 GET - с помощью этого метода можно проверить статус выполнения задачи, используя идентификатор, предоставленный на предыдущем шаге. Как только задача завершена, через этот же метод можно получить результаты его выполнения.
Отчеты: В больших системах формирование отчетов может требовать обработки огромных объемов данных, что занимает много времени. Вместо ожидания окончания процесса, пользователь может отправить запрос на формирование отчета и вернуться к нему позже.
1. Пользователь отправляет POST-запрос для формирования отчета по продажам. При этом в теле запроса передаются параметры, необходимые для формирования отчета, такие как диапазон дат, тип отчета или другие фильтры.
Метод размещения запроса на формирование отчета:
POST /api/reports/sales
{
"startDate": "2023-01-01",
"endDate": "2023-12-31"
}
После обработки этого запроса сервер создает задачу на формирование отчета и помещает ее в очередь.
Cервер возвращает идентификатор задачи. Этот уникальный идентификатор позволяет пользователю отслеживать статус формирования отчета.
❤7
{
"taskId": "12345"
}
2. Через некоторое время пользователь может отправить GET-запрос, чтобы проверить, готов ли отчет или получить его, если он готов.
Метод получения информации по статусу формирования отчета или готового отчета:
GET /api/reports/sales/status/{taskId}
Если отчет еще формируется:
{
"status": "progress"
}
Если отчет уже готов, пользователь может скачать его, используя предоставленный URL в ответе или получить его структуру. Зависит от выбранного способа реализации.
Пример, если в ответ на отчет готова ссылка на его загрузку:
{
"status": "completed",
"reportUrl": "/api/reports/sales/download/12345"
}
Сложные поисковые запросы: Системы-агрегаторы, такие как поисковики авиабилетов, иногда ищут информацию во внешних системах - поставщиках данных. Такой запрос может занять много времени, особенно если один или несколько внешних источников медленно отвечают на запросы.
Представим, что вы создаете API для системы бронирования авиабилетов. Пользователь хочет найти билеты на определенную дату.
1. Пользователь отправляет POST-запрос с деталями поиска (дата, пункт назначения и т.д.).
Метод размещения запроса на поиск авиабилетов:
POST /api/tickets/search
{
"departure": "2023-10-30",
"destination": "Rome",
...
}
Сервер возвращает идентификатор задачи - идентификатор созданного запроса на поиск.
{
"searchId": "Уникальный идентификатор задачи"
}
2. Через некоторое время пользователь делает GET-запрос с этим идентификатором, чтобы узнать статус поиска.
Метод получения статуса или информации по результатам поиска, если он завершен:
GET /api/tickets/search/{searchId}
или
GET /api/tickets/search/status/{searchId}
Ответ (если поиск еще не завершен):
{
"status": "progress"
}
Как только поиск завершен, пользователь получает список доступных рейсов в ответ на GET-запрос.
✅ Этот подход обеспечивает эффективное использование ресурсов сервера и хороший UX для пользователя, который не вынужден ждать завершения длительных операций, а может поставить задачу на получение данных в фон, или получать результаты поиска быстро и порциями, по мере сбора данных из разных систем (помните, когда во время поиска авиабилетов у вас постоянно добавляются новые и новые записи?).
Это лишь часть примеров, но они являются наиболее ярким подтверждением того, что POST может использоваться для получения данных.
❤9
Друзья, продолжаем говорить о спорных вопросах при проектировании REST API ✔️
Сегодня разберём ещё два вопроса ⬇️
Сегодня разберём ещё два вопроса ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉2