GetAnalyst - Навыки • Системный анализ • Бизнес-анализ – Telegram
GetAnalyst - Навыки • Системный анализ • Бизнес-анализ
19.5K subscribers
2.09K photos
74 videos
203 files
1.19K links
Разбор задач на проектирование систем 🚀 Канал для системных аналитиков, бизнес-аналитиков, тестировщиков и менеджеров проектов

Админ @getanalyst
Сайт https://getanalyst.ru
Чат t.me/getanalystchat
Начинающим в IT @getanalyststart

РКН №5013005196
Download Telegram
⚡️ Как строится URL для REST API методов - разбор примеров для #RentACar ⚡️

Разбираем на примере методов:
👉 POST /car
👉 GET /car
👉 GET /car/{carId}

Подробности в картинках к посту.


0️⃣ Метод HTTP
Не относится к URL, но тесно связан с ним. Описывала правила выбора в этом посте.

1️⃣ Протокол
В начале любого URL указывается протокол HTTP(s), который обеспечивает передачу данных.

2️⃣ Доменное имя
Основной адрес, по которому можно обращаться к серверу.

3️⃣ Путь (Path)
Путь включает в себя один или несколько сегментов, разделённых слешами (/).

▫️“api” - указатель на каталог API сервера, может быть название вида api. Это необязательный сегмент, может отсутствовать в URL.
▫️имя api - указывает на конкретный интерфейс API, предназначенный для разных пользователей системы.
▫️v1
- версия API, важна для поддержки совместимости с предыдущими версиями.

▫️car - это ресурс, к которому осуществляется доступ. В данном случае “машина”. Может быть во множественном числе (cars).
▫️{carId} - это параметр в пути URL (path-параметр), указывающий на конкретный авто по его id в БД системы. Фигурные скобки {} обозначают переменную часть URL, значение которой должно быть предоставлено клиентом (например, идентификатор 12345).


4️⃣ Query-параметры (Query-parameters)
Дополнительные параметры запроса после ?, необязательны. Если их несколько, то перечисление через символ &.
Обычно используются для фильтров, сортировок и пагинации при получении списков методом GET, но могут быть и в других API-методах.

В примере:
GET …/car?offset=0&limit=10&dateFrom=2024-10-10&dateTo=2024-10-15

👉 ?offset=0&limit=10 указывает на запрос результатов с 0-го, ограниченный 10-ю результатами на страницу. Это два отдельных query-параметра, которые являются элементами пагинации (постраничного получения данных через API).
👉 &dateFrom=2024-10-10&dateTo=2024-10-15 - фильтр на период аренды, даты “с” и “по”.



Это основные элементы URL в REST API, которые помогают точно определить, к какому ресурсу (сущности) должен быть осуществлен доступ 💾

#RestApiGA
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
30👍20🔥15❤‍🔥3
Закрепим знания структуры URL в REST API 🙌

Какой из следующих URL составлен больше всего подходит для получения списка доступных автомобилей для аренды?
Anonymous Quiz
4
2. Какой из следующих URL является правильным примером для получения информации о конкретном автомобиле (id = 123)?
Anonymous Poll
3. Какой из следующих URL является некорректным для запроса списка всех автомобилей в системе?
Anonymous Poll
4. Какой URL и метод следует использовать для добавления нового автомобиля в систему через API?
Anonymous Poll
👍4
5. Какой URL и метод следует использовать для обновления данных конкретного пользователя с id=567?

(ответы на все вопросы будут разобраны в среду)
Anonymous Poll
This media is not supported in your browser
VIEW IN TELEGRAM
Не отвлекаемся, проходим мимо, фокус на работе 👩‍💻🧑‍💻🦭

Настроение понедельника 😁
😁60😍8💯5
GetAnalyst - REST API - Гайд по JSON.pdf
10.2 MB
📘 Руководство по JSON в REST API - что это, зачем и как создавать 📘 + история про собеседования

Нанимаем системного аналитика на проект, где нужно работать с web-, mobile и backend.

Есть публичная REST API-документация. Опубликована на официальном сайте. Протестировать бесплатно нельзя, почитать бесплатно можно.

Все приложения есть в открытом доступе, можно зарегистрироваться и посмотреть что внутри до собеседования.


Для технической части собеседования не придумываем ничего заумного, а даём реальную задачу из проекта:
Есть экран веб-приложения. Перед кандидатом скриншот с уже реализованной функциональностью в системе.
Нужно описать REST API метод(-ы) для работы этого экрана.


👌 Тип метода GET выбирают правильно почти всегда.

👌 URL делают, не всегда так, как ожидаем. Но хотя бы понимаем, где придётся доучить.


🥲 А вот когда дело доходит до JSON, то тут мы можем смело принимать решение о продолжении диалога.

🔴 👉 Типичные ошибки и недочеты:
- Незнание типов данных.
- Дата и время - про стандарты ISO не слышали.
- Умение самостоятельно описать только "плоские" объекты данных, без вложенных структур.
- JSON запроса и ответа одинаковые, либо один из них теряется в случае методов, отличных от GET.
- Неумение работать со списками - массивы.
- Нейминг (именование полей) порой заставляет и смеяться, и плакать.
- Отсутствие знаний базовых структур для методов.
+ Незнание инструментов, что сразу показывает отсутствие опыта.

Это самое-самое, что бросается в глаза с первых минут. Давайте не будем допускать их? 🙂


Руководство по JSON, прикрепленный к посту - ваш будущий помощник и ориентир в проектировании API 📘
В нем собрала самое ключевое, чтобы не валить ваши собеседования и качественно выполнять свою работу 🙌

-----
P.S.
И большой намек к этому посту:
🚨 REST API-документацию компании можно изучить до собеседования, если она есть в открытом доступе. Это полезно, чтобы понять, что будут ожидать на практике, и посмотреть на подходы работы в компании.
-----

Запоминаем, сохраняем, пользуемся 🙏

#RestApiGA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5113👍5❤‍🔥4
[GetAnalyst] RentACar Project - JSON GET _car_carId.json
1.1 KB
🔷 Пример задачи на проектировани JSON без списков 🔷

По мотивам предыдущего поста про JSON, показываю вам пример задачи, которую можно встретить в ходе собеседований на системного аналитика.

А также в реальной работе, когда вам приносят макет UI от дизайнера, и вы пониммаете, что половины данных в БД нет 😁 А дизайнеры и маркетологи уже придумали…

На скриншоте к посту мы видим экран приложения #RentACar. Он отображается пользователям веб-приложения после поиска авто, перед бронированием.

Метод REST API 👇

🔷 Запрос:
GET https://rentacar-project.com/api/public/v1/cars/{carId}
{carId} - идентификатор автомобиля в БД, path-параметр.

Пример запроса
GET
https://rentacar-project.com/api/public/v1/cars/123

🔷 Успешный ответ:
HTTP-200

Тело ответа (пример):
На картинке к посту + в файле JSON.


Пояснения к процессу создания JSON в следуюшем посте 👇

#RestApiGA
15👍7👏4
🔷 Пример задачи на проектировани JSON без списков - на что обращать внимание 🔷

Как решала задачу по созданию JSON, если говорить не про собеседование, а про реальную работу:

0️⃣ Доработка БД, т.к. на UI больше данных
Мои дополнительные вводные - БД проекта.
В ней отсутствует часть данных, которые есть в UI: правила аренды, характеристики (двигатель, коробка, кол-во мест и другие).
Новые поля и таблицы надо добавить в БД.
На этом шаге JSON пока не трогаю.


1️⃣ Для этого экрана сделала основным объект “автомобиль” (car)
Перечисляю в JSON данные о нем:
- "id",
- "brand" - вложенный объект с данными из связанной таблицы БД, но можно было и упроситить,
- "class" - аналогично "brand",
- "model",
- licensePlate - есть в БД, доступен для админов, но от обычных пользователей гос. номер авто мы должны скрывать,
- "publicCode" - а вот это дизайнеры не учли, надо сообщить, чтобы добавили,
- "color" - в БД есть, а на UI нет, но поле не секретное, поэтому можно вернуть, если вдруг в будущем оно понадобится,
- "mileage" - на экране показано “< 50 тыс”, а в БД конкрентное число, которое обновляется каждый раз после поездок. В API можем возвращать фактическое число миль, а Frontend-разработчики пусть сами наводят красоту с “< 50 тыс” 🙂
…. и т.д.

Суть шага:
В приоритете смотрю на UI, далее делаю сверку данных UI с БД, и строю плоский список данных в формате JSON.
Если вижу связанные таблицы (внешние ключи FK в описываемой сущности), то делаю вложенные объекты в JSON, но это зависит от задачи.


2️⃣ "rentalRules" и "rentalTerms" - логически сгруппировала данные об условиях аренды в общем и для текущего запроса от пользователя.
От логической группировки можно отказаться, но кажется, что это делает структуру более удобной для чтения.


3️⃣ Рассчеты цен делает алгоритм REST API метода, чтобы не дублировать сложные расчеты в разных Frontend.


Есть ли еще варианты для JSON? Да.

Это один из тех, которые выбрала я, зная БД и UI всех приложений, в которых понадобится аналогичный JSON-объект данных car (автомобиль).


#RestApiGA
17💯10🔥5
🔷 Пример задачи на проектировани JSON - массивы [] 🔷

Списки обычно нужны при получении данных. Но иногда и для других операций.

Когда мы работаем со списками, то при проектировании JSON обращаем внимание на следующее:
1. Есть список - нужна или понадобится пагинация (limit, offset, count).

2. Название списка - рекомендуется множественное число ("cars": []).

3. Список содержит меньше элементов, чем полный объект car, поэтому возвращаем необходимый и достаточный минимум в ответе API (всё, что связано с отображаемыми данными на карточках + с фильтрами).

4. Чем меньше вложенных структур у элементов {} внутри списка [], тем лучше. Убирать лишнюю вложенность по воможности.

5. Рекомендуется сохранять структуру одиночного объекта JSON для удобства клиента.


👉 Пример:
Метод получения списка автомобилей

GET https://rentacar-project.com/api/public/v1/cars


Пример JSON для списка:
{ "limit": 10,
"offset": 0,
"count": 235,
"cars": [
{
"id": "b3fd9d8c4-8f6a-4e8f-b7e9-2d8f7b9a0d4c",
"brand": {
"id": "f4d8e4a6-8f29-4e60-b8c7-3c6a2dbf8c61",
"name": "Mercedes-Benz"
},
"class": {
"id": "d5a6e4b8-9b7a-4e92-82f6-b3a6f7b8e0c5",
"name": "Премиум"
},
"model": "CLA AMG",
"publicCode": "10293847",
"year": 2021,
"gearbox": "auto",
"currentRentalOffice": {
"id": "a3b9f2d4-7b2a-41e5-8b3e-4c7d3f5e8e3b",
"name": "Москва, Центральная",
"address": "г. Москва, ул Центральная, 123"
},
"rentalTerms": {
"startDate": "2024-10-24",
"endDate": "2024-10-27",
"dailyRate": 8000,
"totalPrice": 24000
},
"pictureId": "e2c4d6e1-8f1e-43a9-8f2e-4d2f7b8e0b5a"
},

{
"id": "d7cc0a8c4-8f6a-4e8f-b7e9-2d8f7b9a0d6d",
...
...
...
"pictureId": "a3b7a9e1-8f1e-43a9-8f2e-4d2f7b8e0c6d"
}
]
}



#RestApiGA
22🔥7🥰3❤‍🔥1👌1
🤍 Коллеги, спасибо вам за обратную связь 🤍

Каждый раз душа радуется, когда смотрю ответы в период рассылки сертификатов об окончании обучения и вручения подарков для наших самых активных участников занятий ☺️

Это слова, которые вдохновляют развивать GetAnalyst.

Ваши слова ценны для всей команды 🤍
20👍6
🙌 Разбор тестирования по структуре URL 🙌

(тестирование было в понедельник)

1. Какой из следующих URL составлен больше всего подходит для получения списка доступных автомобилей для аренды?

https://api.rentacar-project.com/admin/v1.0/cars?status=available - самый подходящий вариант, так как фильтр по статусу верно вынесен в состав query-параметров.

☑️ https://api.rentacar-project.com/admin/v1.0/cars/available - допустимый вариант, но плохо в нем то, что фильтров для списка авто может быть больше, и лучше всегда фильтры отправлять в query (после ?)

https://rentacar-project.com/v1.0/admin/available/cars - ошибочный вариант, т.к. нарушен порядок: available не является объектом, и он почему-то впереди указателя на объект машины “cars”.

https://rentacar-project.com/admin/cars/status/avallable - ошибочный вариант, т.к. сделали странное нагромождение в конструкции пути запроса, чтобы показать, что status=available (доступен)


‼️api.rentacar-project.com - префикс api перенесен в доменное имя, вместо пути. Это допустимо!




2. Какой из следующих URL является правильным примером для получения информации о конкретном автомобиле (id = 123)?

https://rentacar-project.com/api/admin/v1/car/{123} - не должно быть {}, это используется только для обозначения в документации, что на это место надо подставить значение.

☑️ https://rentacar-project.com/api/admin/v1/car?carld=123 - допустимо, но когда получаем информацию о конкретном id, рекомендовано использовать не фильтры, а path-параметры.

https://rentacar-project.com/api/admin/v1/car/123 - идеально, это метод GET /car/{carId}.

https://rentacar-project.com/api/admin/v1/car/{carld=123} - не должно быть {}, как в=и в варианте 1 что-то странное.




3. Какой из следующих URL является некорректным для запроса списка всех автомобилей в системе?

https://api.rentacar-project.com/v1.0/cars?page=2&limit=10 - допустимо, элементы пагинации page (страницы), limit (максимальное число элементов на страницу)

☑️ https://rentacar-project.com/v1.0/car/all - допустимо, хотя так крайне редко делают, часть all можно смело отбросить

☑️ https://api.rentacar-project.com/cars?v=1.0&limit=10 - можно сделать версию query-параметром. Но это такое же плохо сопровождаемое решение, как и версия api в body. Не рекомендуется, но можно. Если не нравится версия в пути, отправьте в headers. На уровне query ее могут потерять, она бросается в глаза и мешает

https://rentacar-project.com/api/v1.0/cars?offset=100&limit=20 - допустимо, элементы пагинации page (номер элемента), limit (максимальное число элементов на страницу)



Продолжение следует 🙂

#RestApiGA
👍9🔥21
💥 Завершается запись на REST API на специальных условиях 💥

Предстоит менять компанию и выходить за пределы знаний о системах, с которыми работали? Нужно изучить REST API, Swagger, Postman? Этот пост для вас 🙂

Открыта запись на практическую программу:
📚
Дизайн REST API
🗓 Старт 5 ноября

❗️Следующий поток в онлайн планируется на апрель 2025.

🎁 Для всех, кто запишется на программу до 25 октября, действуют самые выгодные условия + дарим в подарок дополнительное обучение по БД+SQL.


В течение 2-х месяцев вас ждет:
◽️ 8 онлайн-встреч с опытными системными аналитиками.
◽️ Работа над ОДНИМ проектом в течение всей программы.
◽️ Детальный разбор проектирования RESTful API с нуля: от БД+UI до готовых RESTful API методов.
◽️ Практика в инструментах для тестирования и документирования REST API - 🟠Postman и 🟢Swagger.
◽️ Встреча для разбора индивидуальных проектов.


Мы не учим проходить собеседования. Мы делимся опытом, который помогает уверенно решать реальные задачи, связанные с REST API.

Самые приятные сообщения в середине прохождения программы:
Был на собеседовании и получил оффер! Спасибо!!! Все что уже изучили пригодилось. Я смог дать несколько вариантов решения задачи и объяснить, почему каждый из них подходит, какие хуже, а какой лучший

Это результаты вашей работы, которыми я восхищаюсь! ❤️

Приглашаем вас присоединиться к новой команде по работе с REST API!

Есть вопросы или не уверены, что эта программа актуальна для вас?
Пишите @getanalyst или заполняйте анкету предзаписи. Мы свяжемся с вами, поможем оценить текущие навыки и ответим на ваши вопросы! 🙂
👍94
🙌 Продолжение: Разбор тестирования по структуре URL с понедельника 🙌


4. Какой URL и метод следует использовать для добавления нового автомобиля в систему через API?

GET https://api.rentacar-project.com/v1.0/cars - GET используется только для получения данных.

POST https://api.rentacar-project.com/v1.0/cars - идеально подходит для создания автомобилей.

PUT https://api.rentacar-project.com/v1.0/cars - метод PUT можно исользовать для методов создания и изменения данных, помогает обеспечивать идемпотентность.

DELETE https://api.rentacar-project.com/v1.0/cars - DELETE используется только для операций удаления.



5. Какой URL и метод следует использовать для обновления данных конкретного пользователя с id=567?

PUT https://rentacar-project.com/api/v1.0/public/users/567 - хороший вариант, PUT используется для полной перезаписи данных в БД.

PATCH https://rentacar-project.com/api/v1.0/users/567 - хороший вариант, PAT CH используется для частичной перезаписи данных в БД.

☑️ PATCH https://rentacar-project.com/api/v1.0/users?userld=567 - можно, но все же указатели на объект рекомендуется держать не в query, а в path-параметрах запроса.

POST https://rentacar-project.com/api/v1.0/users/567 - допустимо для HTTP API, но недопустимо для RESTful API принципов.




Если пропустили тестирование и теорию в понедельник, очень рекомендую вернуться к ним.

Важная теория:
📌 Типы методов
📌 Структура URL
📌 Идемпотентность в API (подкаст)


Будьте внимательны в таких мелочах и помните, что мы изучаем принципы RESTful API не для прохождения собеседований, а для того, чтобы создавать удобный и понятный интерфейс взаимодействия с сервером для наших и внешних разработчиков при интеграциях 🙌

#RestApiGA
13
💿📂 Нормальные формы БД - что важно знать системным аналитикам 💿📂

Если вы уже работаете с проектированием баз данных и не используете, либо забыли про нормальные формы, или только начинаете их изучать тему, то этот эпизод для вас! Он посвящен основам проектирования реляционных баз данных, а именно — нормальным формам: что это, сколько их, и как они помогают улучшить структуру базы данных.

Этот выпуск отлично подойдет как для общего развития, так и для подготовки к собеседованиям.

Мы начнем с объяснения, что такое реляционная база данных, а затем шаг за шагом разберем процесс её нормализации. На простых примерах вы увидите, как выглядит таблица “до” и “после” применения каждой нормальной формы.

🔗 Сайт эпизода со ссылками и материалами

Эпизод доступен в:
Apple Podcast
Яндекс.Музыка
YouTube (видео)
Telegram (видео)
Castbox
Spotify

Делитесь с коллегами и подписывайтесь на канал подкаста, чтобы следить за релизами новых эпизодов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥206❤‍🔥1👍1
👀 Важные моменты, на которые я обращаю внимание в GetAnalyst 👀

1. На все вопросы нужно дать ответы 💻
С понедельника по пятницу у меня есть 1-1.5 часа на чаты по обучению.
Да, это занимает много времени, но я стараюсь дать развернутые ответы на все вопросы.
Если требуется дополнительная информация, я подбираю проверенные статьи, книги и видео, а затем делюсь с коллегами.

2. Проверка ДЗ не обзорно для галочки, а со всем занудством и кучей комментариев, либо с положительной обратной связью и выделением особенно крутых решений 🙂
Каждый понедельник я проверяю ДЗ, изучая ваши странички в Confluence 🤍
Я и моя команда даём индивидуальную обратную связь по каждой работе, с учетом того, что задачи в аналитике всегда имеют несколько решений и нельзя просто сравнивать с шаблоном.

3. Meeting Notes для лучшего запоминания 📝

По каждой онлайн-встрече я рекомендую вести заметки.
Обожаю слышать шуршание листов на индивидуальных занятиях, когда понимаю, что заметки идут в дело.
Сама во время онлайна тоже выделяю важные моменты, собираю их в Confluence и передаю группе.

4. Активность в онлайн 🟢
Мы учитываем посещения и активность в практике.
По окончании обучения дарим подарки участникам с максимальным количеством баллов.
Если нужно сделать рекомендательное письмо, это помогает дать реальную обратную связь.

5. Вопросы после занятия приветствуются
Иногда после практики, или при просмотре записи занятия, появляются вопросы.
Их всегда разбираем в Telegram-чате группы (п.1).

6. В чатах наставничества можно задать любой вопрос
Обсуждаем проекты по обучению и по работе.
Даю задания с собеседований, оцениваем грейд.
Делюсь полезными материалами по запросам.
P.S. Уважаю ребят за соблюдение NDA при обсуждении рабочих моментов!

7. Только небольшие группы, чтобы сохранить личный контакт ❤️
Я помню всех, с кем работала.


Много энергии и заботы, которую я вкладываю в GetAnalyst.
Много личной работы с каждым.
Много процессов, которые мы построили.
И все эти важные детали я хочу беречь и развивать дальше ❤️‍🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
19❤‍🔥3👍3🔥2😁1