Привет, Хабр! Трендом ИТ стало расширение объема знаний и навыков за счет смежных компетенций. К примеру, углубленное владение инструментарием REST API, которое обычно ассоциируется с разработчиками, может быть и частью работы системного аналитика. Эта статья — набор практических задач по REST API, специально подготовленных для системных аналитиков с высоким уровнем грейда.
Кому будет полезна эта статья? Знание языков программирования не всегда требуется от системного аналитика (СА). Однако владение этими навыками может открыть новые возможности и дать вам преимущество на конкурентном рынке труда.
Тема подготовки к практическим заданиям по REST API — это продолжение обзорной статьи «Как пройти техническое интервью на позицию системного аналитика в финтех-проект» и статьи с примерами по теории REST API “25 вопросов и ответов по терминам REST API на собеседовании по вакансии системного аналитика”.
Часть задач из статьи требуют начальных знаний Python, — языка, который сегодня изучают даже в школах. Поэтому от опытного СА, с грейдом сеньор или мидл, работодатели также вправе ожидать подобных знаний. А может, вы уже изучили Python ранее, и тогда примеры заданий в статье будут для вас просты и понятны.
Вот список заданий в этой статье:
SSP SOFT приглашает на позиции системного аналитика, разработчиков на Java, React и Python, 1С, инженеров DevOps и QA — см. страницу на hh.ru.
5 относительно несложных практических заданий по REST API
Начать можно с примеров относительно простых практических заданий, которые обычно получает кандидат на позицию системного аналитика (СА) с грейдом мидл. Учитывая, что общее время технического интервью не превышает 1 часа, то кандидат, выполняя задание из этого раздела, должен уложиться примерно в 5-7 минут.
В этой части интервью по REST API, которая посвящена практическому заданию, оценивается не только умение писать код HTTP запросов, но и понимание более широкого контекста этой технологии и особенно — способность кандидата объяснить свои ответы.
Почему так — архитектура REST API построена на определенных принципах, таких как использование HTTP-методов, ресурсов и состояний. Кандидат, который может только писать запросы, но не понимает эти принципы, может создавать неоптимальные решения. Поэтому в применяемой в компаниях балльной системе оценки кандидата способность объяснить свой код важнее, чем умение этот код написать. А теперь — переходим к примерам заданий.
1. Напишите пример заголовка Content-Type в HTTP-запросе, объясните свой код и для каких целей Content-Type используется при работе с REST API.
Ответ: Content-Type — это заголовок HTTP-запроса, который указывает на тип данных, содержащихся в теле запроса. Этот заголовок очень важен при работе с REST API, потому что он позволяет серверу правильно интерпретировать данные, которые ему отправляются, и выполнить соответствующие операции.
Пример заголовка Content-Type в HTTP-запросе:
Content-Type: application/json
В этом примере, Content-Type устанавливается в application/json, что указывает, что данные в теле запроса представлены в формате JSON. Это означает, что сервер ожидает, что данные будут валидными JSON-структурами, и будет обрабатывать их соответствующим образом.
Content-Type используется при работе с REST API по нескольким причинам:
Идентификация формата данных: Позволяет серверу понять, какой тип данных он получает, чтобы правильно их обработать. Это особенно важно при отправке и приеме разных форматов, таких как JSON, XML, и HTML.
Безопасность: Помогает серверу отражать атаки, основанные на неправильной обработкой данных. Например, сервер может отклонить запрос, если Content-Type не соответствует ожидаемому формату.
Качество обслуживания (Quality of Service): Позволяет оптимизировать обработку данных, уменьшая нагрузку на сервер и сеть. Например, сжатие данных может быть применено, если Content-Type указывает на сжатый формат.
Резюме: Когда указанный Content-Type соответствует формату данных в теле запроса, это позволяет избежать проблем с обработкой запроса на стороне сервера.
2. Напишите пример передачи параметров запроса (query parameters) в URL при использовании RESTful API, затем объясните свой пример
Ответ: Параметры запроса (query parameters) передаются в URL RESTful API после символа вопроса ?
и выглядят как пары «ключ-значение», разделенные символом амперсанда &
.
Предположим, у нас есть RESTful API, предоставляющий информацию о книгах, и мы хотим получить список книг, написанных автором "Марк Твен" и опубликованных после 1870 года. Запрос может выглядеть следующим образом:
GET /api/books?author= Mark%20Twain&publishedAfter=1870
В этом примере:
- GET
- это метод HTTP-запроса, который указывает на операцию "получить" информацию.
- /api/books
- это путь к ресурсу (в данном случае, список книг).
- ?
- символ вопроса, который отделяет путь от параметров запроса.
- author=Mark%20Twain
- это параметр запроса с именем "author" и значением "Mark Twain". Пробелы в значении кодируются как "%20".
- &
- символ амперсанда, который разделяет разные параметры запроса.
- publishedAfter=1870
- это второй параметр запроса с именем "publishedAfter" и значением "1870".
Резюме: Использование параметров запроса в URL позволяет клиентам передавать серверу уточняющую информацию для получения нужных данных.
3. Напишите пример заголовка "Accept" в HTTP-запросе, объясните свой пример. Какие типы данных Accept может указывать при работе с REST API?
Ответ: Заголовок "Accept" в HTTP-запросе используется клиентом для указания типа данных, который он готов принять от сервера. Пример заголовка "Accept" для получения данных в формате JSON выглядит так:
Accept: application/json
В этом примере "Accept: application/json" указывает, что клиент ожидает получить данные в формате JSON. Это означает, что сервер должен ответить клиенту, предоставив данные в формате JSON, если это возможно. Если сервер не может предоставить данные в указанном формате, он вернет код ошибки, например, 406 Not Acceptable (неприемлемый формат).
Заголовок "Accept" может указывать различные типы данных в зависимости от потребностей клиента. Вот распространенные типы данных в заголовке "Accept":
- application/json
- для данных в формате JSON.
- application/xml
- для данных в формате XML.
- text/plain
- для текстовых данных без форматирования.
- text/html
- для данных в формате HTML.
- image/png
, image/jpeg
- для изображений в соответствующих форматах.
Резюме: Использование заголовка "Accept" в HTTP-запросе позволяет задать приоритет получения данных в определенном формате.
4. Объясните, для каких целей можно указывать несколько типов данных в заголовке "Accept" и приведите пример такого заголовка.
Ответ: Указание нескольких типов данных в заголовке "Accept" позволяет клиенту определить предпочтения по отношению к форматам данных, которые клиент готов принять. Этот способ применяется, когда клиент может обрабатывать данные в нескольких форматах и предпочитает один формат, но может принять другой, если сервер не сможет предоставить данные в формате по умолчанию.
Пример заголовка "Accept" с несколькими типами данных:
Accept: application/json, application/xml, text/plain
В этом примере клиент предпочитает получить данные в формате JSON (application/json
).
Если сервер поддерживает этот формат, то клиент получит данные в JSON. Однако, если сервер не может предоставить данные в JSON, клиент готов принять их в форматах XML (application/xml
) или текста без форматирования (text/plain
), в указанном порядке.
Резюме: В общем случае, несколько типов данных в заголовке "Accept" увеличивает гибкость и совместимость между клиентом и сервером, так как сервер может адаптироваться к предпочтениям клиента при отправке данных. Это реализуется в приложениях, когда разные клиенты могут поддерживать разные форматы данных, и сервер может выбирать наиболее подходящий формат на основе запроса клиента.
5. Приведите пример HTTP-кода состояния сервера, когда запрошенный ресурс не найден и объясните свой пример
Ответ: Когда запрошенный ресурс не найден, сервер возвращает код состояния HTTP 404 Not Found. Этот код говорит клиенту, что запрашиваемый ресурс не существует на сервере.
Пример HTTP-ответа с кодом состояния 404:
HTTP/1.1 404 Not Found
Date: хххххххх
Server: Apache
Content-Length: хх
Content-Type: text/html; charset=UTF-8
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /nonexistent -resource was not found on this server.</p>
</body></html>
В этом примере, сервер возвращает ответ HTTP 404 Not Found и сообщение, которое указывает на отсутствие запрашиваемого ресурса. Это сообщение будет отображаться клиенту в браузере или приложении, чтобы уведомить пользователя о том, что ресурс не был найден.
Резюме: Код состояния 404 позволяет клиентам и разработчикам узнать, что запрашиваемый ресурс не существует, и это часто используется веб-серверами для обработки ситуаций, когда страница или ресурс не найдены.
5 сложных практических заданий по REST API
Вторая часть статьи — для кандидата на позицию системного аналитика (СА) с грейдом мидл или сеньор, и опять таки, если позиция предполагает начальные навыки программирования. На выполнение каждого их этих заданий, скорее всего, потребуется минут 7-10.
Среди заданий есть примеры, когда кандидату потребуется небольшое знание Python, Java или других языков программирование на выбор, чтобы написать обработку ответа сервера на HTTP-запрос.
6. Объясните приложенный пример кода HTTP GET-запроса для получения информации о товаре с идентификатором 1234 и обработкой ответа
Ответ: Рассмотрим HTTP GET-запрос для получения информации о продукте с ID "1234" обработан на Python для того, чтобы вывести или информацию о товаре, или сообщение об ошибке:
import requests
url = "http://www.example.com/products/1234"
# GET-запрос
response = requests.get(url)
if response.status_code == 200:
print(response.json())
else:
print('Error: ' + str(response.status_code))
В этом коде мы отправляем GET-запрос к URL, который включает идентификатор продукта (в данном случае, "1234").
Если сервер возвращает статус ответа 200, это означает, что запрос был успешным, и мы выводим информацию о продукте. Если сервер возвращает статус ответа иной чем 200, это означает, что продукт не был найден, и мы выводим соответствующее сообщение об ошибке.
Резюме: Это задание — пример обработки типового запроса о товаре. В реальном запросе заменяем URL на конечную точку нашего REST API.
7. Напишите HTTP POST-запрос для создания новой записи в базе данных и прокомментируйте содержимое запроса
Ответ: HTTP POST-запрос для создания новой записи в базе данных включает в себя тело запроса с данными, которые вы хотите добавить. Пример POST-запроса может выглядеть следующим образом:
POST /api/resource
Content-Type: application/json
{
"field1": "value1",
"field2": "value2",
"field3": "value3"
}
- POST /api/resource
: Это адрес эндпоинта API, куда вы отправляете запрос. Обычно POST
используется для создания новых записей, и /api/resource
представляет собой адрес конкретного ресурса в вашем API.
- Content-Type: application/json
: Заголовок Content-Type
указывает серверу, что тело запроса представляет собой данные в формате JSON.
- { "field1": "value1", "field2": "value2", "field3": "value3" }
: Это тело запроса с данными, которые вы хотите добавить в базу данных. Ключи (например, field1
, field2
, field3
) представляют собой поля в вашей таблице базы данных, а значения (например, value1
, value2
, value3
) - значения, которые вы хотите добавить.
Резюме: Фактический формат и содержание запроса могут варьироваться в зависимости от того, как сервер API настроен для обработки таких запросов.
8. Объясните приложенный пример кода для обработки ответа сервера 401 Unauthorized на запрос REST API по логину-паролю
Ответ: Когда сервер REST API возвращает код состояния 401 Unauthorized, это означает, что запрос не был авторизован, и клиенту не разрешен доступ к запрошенным ресурсам. Для того чтобы пройти аутентификацию, следует предоставить правильные учетные данные, в данном случае(имя пользователя и пароль.
Рассмотрим пример кода на Python, использующий библиотеку requests
, для обработки ситуации 401 Unauthorized:
import requests
from requests.auth import HTTPBasicAuth
response = requests.get('http://www.example.com/products/1234', auth=HTTPBasicAuth('username', 'password'))
Вот что происходит пошагово:
from requests.auth import HTTPBasicAuth:
Эта строка импортирует класс HTTPBasicAuth из модуля auth, который является частью библиотеки requests.
HTTPBasicAuth и используется для выполнения базовой аутентификации при отправке HTTP-запросов.
response = requests.get('http://www.example.com/products/1234', auth=HTTPBasicAuth('username', 'password')):
Эта строка отправляет HTTP GET-запрос к URL 'http://www.example.com/products/1234'.
Параметр auth=HTTPBasicAuth('username', 'password') указывает, что запрос должен использовать базовую аутентификацию с именем пользователя 'username' и паролем 'password'. Ответ сервера сохраняется в переменной response.
Резюме: Код в данном примере запрашивает имя пользователя и пароль, но в реальной ситуации,можно использовать токены, ключи API или другие методы аутентификации в зависимости от требований вашего REST API.
9. Предположим, вам поступило задание разработать REST API для управления задачами в To-Do List, в этом задании предложите точки входа
Ответ: При разработке REST API для управления задачами в списке дел можно предложить следующие точки входа:
GET /tasks: Получение списка всех задач.
GET /tasks/{id}: Получение информации о конкретной задаче по ее идентификатору.
POST /tasks: Создание новой задачи.
PUT /tasks/{id}: Обновление информации о задаче по её идентификатору.
DELETE /tasks/{id}: Удаление задачи по ее идентификатору.
Резюме: Задача в списке дел может включать в себя поля, такие как id, title, description, status и другие. Также потребуется реализовать возможность помечать задачи как "выполнено" или "не выполнено".
10. Назовите принципы архитектуры микросервисов для интеграции разрабатываемого приложения с API банковской системы
Ответ: Архитектура микросервисов предполагает разделение большого приложения на множество независимых сервисов, каждый из которых выполняет свою уникальную функцию и коммуницирует с другими через определенные протоколы, такие как REST API.
Вот 4 принципа архитектуры микросервисов при интеграции нового приложения с API банковской системы:
Взаимодействие через API: Все микросервисы будут взаимодействовать друг с другом через определенные API. Это позволяет интегрировать новое приложение с банковской информационной системой, поскольку можем разработать для этой цели новый микросервис, который будет взаимодействовать с банковской системой через ее API.
Независимость сервисов: Каждый микросервис будет независимым и сможет работать автономно. Это означает, что если мы вносим изменения в один сервис, это не должно влиять на другие сервисы.
Масштабируемость: Микросервисы можно масштабировать в зависимости от требований. Если нагрузка на определенный сервис возрастает, мы можем просто увеличить количество инстансов (экземпляров) этого сервиса.
Безопасность: Поскольку каждый микросервис взаимодействует через API, мы можем контролировать доступ к каждому сервису. Это особенно важно при работе с банковской системой, где требуется высокий уровень безопасности.
Резюме: Архитектура микросервисов позволяет интегрировать новое приложение с API банковской системы, обеспечивая при этом независимость сервисов, масштабируемости и безопасности.
Заключение
В этой статье вы познакомились с 10 примерами заданий по REST API, которые могут быть использованы на техническом интервью для кандидатов на вакансию системного аналитика. Эти задания имеют повышенный уровень сложности и предназначены для оценки различных аспектов знаний и навыков кандидата в области RESTful API.
В целом, задания по REST API на техническом интервью могут быть очень разнообразны, и охватить их все в одной статье невозможно. Но можно почувствовать уровень сложности заданий в зависимости от грейда (джун, мидл, сеньор) и потренироваться на аналогичных заданиях, которые во множестве представлены на разных онлайн-ресурсах.
Освежите к интервью знания по основам REST, HTTP-запросов, по обработке кодов состояния, работу с параметрами запроса и заголовками, а также аутентификацию.
Посмотрите, к примеру, статью к собеседованию по теории REST API “25 вопросов и ответов по терминам REST API на собеседовании по вакансии системного аналитика”.
И главное — помните, что знания по REST API нужны не для интервью и получения оффера. Они нужны для работы над реальными проектами и помогут вам успешно справляться с задачами в сфере интеграции систем и разработки программных решений. Успехов на собеседованиях!
Комментарии (10)
mmMike
10.01.2024 07:16+3Часть задач из статьи требуют начальных знаний Python
Рассмотрим пример кода на Python
Вторая часть статьи — для кандидата на позицию системного аналитика (СА)А вы точно по проектированию HTTP вопросы задаете? А не по питону?
Странный набор высосанных из пальца и не систематизированных вопросов.Т.е. аналитик должен знать питон. А если знает как пользоваться curl или postman или, например, js (не знаю уж зачем это аналитику знать JS), но не знает питон - то он все! не знает принципе протокола HTTP (как бы REST)
Вы это серьезно?sergbe Автор
10.01.2024 07:16+2Если в коммерческой конторе собес, то скорее вы правы. А по госстандарту требований к системному аналитику - обязан знать языки программирования. Не я выдумал, вопрос к Минтруду РФ.
mello1984
10.01.2024 07:16+1Странно, не очень понимаю, зачем системному аналитику знать, как конкретно пишутся заголовки запроса, или как на питоне написать гет...
В каком случае он может применить эти данные? Неужели реально это спрашивают на собесах аналитиков?
sergbe Автор
10.01.2024 07:16+2Это хороший вопрос, на рынке по требованиям к знаниям СА огромный разнобой. Есть госстандарт требований к системному аналитику при найме и аттестации в госконторах. Но там совсем северный пушной зверь. Должен уметь все, кроме разве что управлять самолетами. А вот технологии машиностроения и приборостроения уже обязан знать, не говоря о языках программирования.
SysManOne
10.01.2024 07:16Очень странные дела ... Где Rest API и где системный анализ? Это удел пограммилл, разве нет ? И почему именно Rest API, а не , допустим RPC/XDR или TLV или ЖРПС ?
Без претензий, просто необычно видеть такую связку. Ну и ... что делать на собеседовании если конец сервера вернул код 301 ? :-)sergbe Автор
10.01.2024 07:16+1Rest API спрашивают на собесе на системного аналитика. Много видео о собесе СА, на Ютубе от Яндекса, разных банков и крупных компаний. Все про Rest API в том или ином объеме спрашивают.
mr-garrick
10.01.2024 07:16+2Бред какой-то! Говорите про Python и спрашиваете как вручную прописать HTTP заголовок запроса и тут же почему-то авторизация на Python. Почему не в HTTP? Почему аналитик должен знать как это делать на Python? Как на счёт всех остальных языков программирования? А вообще программисты на Python умеют делать HTTP заголовок вручную и знают куда его потом вставлять? (Господа Гусары, молчать!) Согласен что и аналитику и программисту надо знать как работает HTTP/REST и не только (...а то реально такие клоуны иногда попадаются - REST от SOAP не отличают, web-сервис и web-сервис, что ещё надо?), но вот тут какая-то несистематизированная фигня написана. Я бы предложил:
какие бывают типы web-сервисов (SOAP, REST, XML-RPC)
какие бывают типы запросов (GET, POST, PUT, DELETE), ещё про SOAP отдельная тема.
основные коды ответов сервера (тот же 404, 401, 500, 200)
какие бывают типы авторизации (Basic, Kerberos, NTLM & etc.)
может быть ещё - как подключится к REST сервису по HTTPS (с сертификатом, выданным сервером) и туда же - какие бывают сертификаты.
ну и раз уж про сервисы, то WSDL, XSD, OpenAPI, Swagger & etc.
короче, мне не понравилось.
sergbe Автор
10.01.2024 07:16+1Понимаю вашу позицию, но уже была статья с примерами по теории REST API “25 вопросов и ответов по терминам REST API на собеседовании по вакансии системного аналитика”.
mr-garrick
10.01.2024 07:16Ну, если вы хотели осветить эту тему конкретно в реализации Python, то и надо было писать про Python, а не HTTP заголовки:
какие есть библиотеки для работы с web-серсиами в Python, в чём их разница.
примеры использования разных библиотек, опять же авторизация, сертификаты и пр.
ну, и т.п.
только это уже не про аналитика будет.
Robastik
Чатжпг же, да?