Как стать автором
Обновить
107.27
SSP SOFT
🔹 Более 15 лет занимаемся заказной разработкой ПО

10 специфических вопросов по REST API на техническом собеседовании по вакансии системного аналитика

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров12K

Привет, Хабр! Трендом ИТ стало расширение объема знаний и навыков за счет смежных компетенций. К примеру, углубленное владение инструментарием REST API, которое обычно ассоциируется с разработчиками, может быть и частью работы системного аналитика. Эта статья — набор практических задач по REST API, специально подготовленных для системных аналитиков с высоким уровнем грейда.

Кому будет полезна эта статья? Знание языков программирования не всегда требуется от системного аналитика (СА). Однако владение этими навыками может открыть новые возможности и дать вам преимущество на конкурентном рынке труда.

Тема подготовки к практическим заданиям по REST API — это продолжение обзорной статьи «Как пройти техническое интервью на позицию системного аналитика в финтех-проект» и статьи с примерами по теории REST API “25 вопросов и ответов по терминам REST API на собеседовании по вакансии системного аналитика”.

Часть задач из статьи требуют начальных знаний Python, — языка, который сегодня изучают даже в школах. Поэтому от опытного СА, с грейдом сеньор или мидл, работодатели также вправе ожидать подобных знаний. А может, вы уже изучили Python ранее, и тогда примеры заданий в статье будут для вас  просты и понятны.

Вот список заданий в этой статье:

  1. Напишите пример заголовка Content-Type в HTTP-запросе, объясните свой код и для каких целей Content-Type используется при работе с REST API

  2. Напишите пример того, как передаются параметры запроса (query parameters) в URL при использовании RESTful API. Объясните свой пример

  3. Напишите пример заголовка "Accept" в HTTP-запросе.  Объясните свой пример. Какие типы данных Accept может указывать при работе с REST API?

  4. Объясните, для каких целей можно указывать несколько типов данных в заголовке "Accept", Приведите пример такого заголовка

  5. Приведите пример HTTP-кода состояния сервера, когда запрошенный ресурс не найден, объясните свой пример

  6. Вам предоставлен HTTP GET-запрос для получения информации о товаре с идентификатором 1234 и обработкой ответа. Объясните пример кода

  7. Напишите HTTP POST-запрос для создания новой записи в базе данных. Прокомментируйте содержимое запроса

  8. Объясните пример кода для обработки ответа сервера 401 Unauthorized на запрос REST API по логину-паролю

  9. Предположим, вам поступило задание разработать REST API для управления задачами в To-Do List. Предложите точки входа

  10. Назовите принципы архитектуры микросервисов для интеграции разрабатываемого приложения с API банковской системы

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 по нескольким причинам:

  1. Идентификация формата данных: Позволяет серверу понять, какой тип данных он получает, чтобы правильно их обработать. Это особенно важно при отправке и приеме разных форматов, таких как JSON, XML, и HTML.

  2. Безопасность: Помогает серверу отражать атаки, основанные на неправильной обработкой данных. Например, сервер может отклонить запрос, если Content-Type не соответствует ожидаемому формату.

  3. Качество обслуживания (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 банковской системы:

  1. Взаимодействие через API: Все микросервисы будут взаимодействовать друг с другом через определенные API. Это позволяет интегрировать новое приложение с банковской информационной системой, поскольку можем разработать для этой цели новый микросервис, который будет взаимодействовать с банковской системой через ее API.

  2. Независимость сервисов: Каждый микросервис будет независимым и сможет работать автономно. Это означает, что если мы вносим изменения в один сервис, это не должно влиять на другие сервисы.

  3. Масштабируемость: Микросервисы можно масштабировать в зависимости от требований. Если нагрузка на определенный сервис возрастает, мы можем просто увеличить количество инстансов (экземпляров) этого сервиса.

  4. Безопасность: Поскольку каждый микросервис взаимодействует через API, мы можем контролировать доступ к каждому сервису. Это особенно важно при работе с банковской системой, где требуется высокий уровень безопасности.

Резюме: Архитектура микросервисов позволяет интегрировать новое приложение с API банковской системы, обеспечивая при этом независимость сервисов, масштабируемости и безопасности.

Заключение

В этой статье вы познакомились с 10 примерами заданий по REST API, которые могут быть использованы на техническом интервью для кандидатов на вакансию системного аналитика. Эти задания имеют повышенный уровень сложности и предназначены для оценки различных аспектов знаний и навыков кандидата в области RESTful API.

В целом, задания по REST API на техническом интервью могут быть очень разнообразны, и охватить их все в одной статье невозможно. Но можно почувствовать уровень сложности заданий в зависимости от грейда (джун, мидл, сеньор) и потренироваться на аналогичных заданиях, которые во множестве представлены на разных онлайн-ресурсах.  

Освежите к интервью знания по основам REST, HTTP-запросов, по обработке кодов состояния, работу с параметрами запроса и заголовками, а также аутентификацию. 
Посмотрите, к примеру, статью к собеседованию по теории REST API “25 вопросов и ответов по терминам REST API на собеседовании по вакансии системного аналитика”.

И главное — помните, что знания по REST API нужны не для интервью и получения оффера. Они нужны для работы над реальными проектами и помогут вам успешно справляться с задачами в сфере интеграции систем и разработки программных решений. Успехов на собеседованиях!

Теги:
Хабы:
Всего голосов 20: ↑11 и ↓9+2
Комментарии14

Публикации

Информация

Сайт
ssp-soft.com
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
EvgeniyaZabelina