Проектирование API: как REST и GraphQL связывают сервисы и приложения воедино

Проектирование API: как REST и GraphQL связывают сервисы и приложения воедино

Что такое API и почему он стал основой современной разработки

API (Application Programming Interface, программный интерфейс приложения) — это формальный договор между двумя программами о том, как они обмениваются данными. Одна сторона отправляет запрос в согласованном формате, а другая возвращает ответ, не раскрывая, как именно устроена её внутренняя логика. Именно эта «непрозрачность» делает API мощным инструментом: мобильное приложение может получать данные с сервера, ничего не зная о базе данных или языке, на котором написан бэкенд.

Сегодня почти любой цифровой продукт — это набор сервисов, общающихся через API. Когда вы оплачиваете покупку, ваше приложение вызывает API платёжной системы; когда смотрите прогноз погоды, приложение обращается к метеорологическому API. По оценкам отраслевых исследований, более 80% веб-трафика приходится не на страницы для людей, а на межмашинные вызовы API. Поэтому умение проектировать понятные и надёжные интерфейсы стало ключевой инженерной компетенцией.

Важно различать сам API как контракт и его реализацию. Хорошо спроектированный контракт живёт годами, переживая несколько переписываний внутреннего кода. Плохой контракт, наоборот, «протекает»: он навязывает клиентам детали внутренней структуры, и любое изменение на сервере ломает десятки приложений.

Архитектурный стиль REST: ресурсы и предсказуемость

REST (Representational State Transfer) — самый распространённый подход к построению веб-API. Его центральная идея проста: всё, чем оперирует система, представляется как ресурс с уникальным адресом. Пользователь, статья, заказ — каждый из них доступен по своему URL, например /users/42 или /articles/108. Действия над ресурсами описываются стандартными HTTP-методами.

Эта опора на существующие механизмы HTTP делает REST предсказуемым. Разработчик, впервые увидевший чужой REST-API, уже примерно понимает, как он работает, потому что соглашения одинаковы у большинства сервисов. GET читает данные и не должен их менять, POST создаёт новый ресурс, PUT и PATCH обновляют, DELETE удаляет. Коды состояния (200, 404, 500) тоже несут смысл, а не выбираются произвольно.

  • GET /articles — получить список статей;
  • GET /articles/108 — получить одну статью по идентификатору;
  • POST /articles — создать новую статью;
  • PATCH /articles/108 — частично обновить существующую статью;
  • DELETE /articles/108 — удалить статью.

GraphQL: клиент сам решает, какие данные ему нужны

GraphQL — язык запросов к API, разработанный в компании Facebook и открытый в 2015 году. Его придумали как ответ на две типичные проблемы REST: избыточную выборку (over-fetching), когда сервер отдаёт лишние поля, и недостаточную выборку (under-fetching), когда для одного экрана приходится делать несколько запросов. В GraphQL клиент сам описывает, какие поля и связи ему нужны, и получает ровно их одним запросом.

Работает это через единственную точку входа и строгую схему типов. Схема описывает все доступные объекты и их поля, поэтому инструменты могут автоматически проверять запросы ещё до отправки на сервер. Для мобильных приложений с медленной сетью это большое преимущество: меньше запросов и меньше передаваемых данных означают более отзывчивый интерфейс.

Однако у гибкости есть цена. Кэшировать GraphQL сложнее, чем REST, потому что все запросы идут на один URL. Тяжёлый вложенный запрос может неожиданно нагрузить базу данных, поэтому нужны ограничения на глубину и сложность. GraphQL не заменяет REST, а дополняет его: он силён там, где данные сильно связаны и клиентам нужна разная их «нарезка».

REST против GraphQL: как выбирать

Выбор между подходами — это не вопрос моды, а вопрос характера задачи. Ниже сведены основные различия, которые стоит учитывать при проектировании нового сервиса. Ни один из вариантов не является «правильным» во всех случаях; зрелые команды нередко используют оба, разделяя ответственность между сервисами.

КритерийRESTGraphQL
Формат запросаМного URL-адресов, HTTP-методыОдин URL, язык запросов
Выборка данныхФиксирована серверомОпределяется клиентом
КэшированиеПростое, средствами HTTPТребует отдельных решений
Кривая обученияПологаяБолее крутая
Лучше всего дляПубличные, простые APIСложные связанные данные

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

Версионирование: как менять API, не ломая клиентов

Как только вашим API начинают пользоваться сторонние приложения, вы теряете право свободно менять контракт. Удаление поля или переименование параметра может одномоментно сломать работу тысяч пользователей. Поэтому изменения делятся на обратно совместимые (добавление нового необязательного поля) и несовместимые (удаление или изменение семантики существующего).

Самый явный способ управлять несовместимыми изменениями — версионирование. Часто версию включают прямо в путь: /v1/articles и /v2/articles сосуществуют, пока старые клиенты не мигрируют. Альтернатива — передавать версию в заголовке запроса. Главное правило — никогда не менять поведение уже опубликованной версии молча.

Хорошая практика — политика устаревания (deprecation). Вы заранее объявляете, что версия перестанет поддерживаться через, скажем, шесть месяцев, помечаете устаревшие поля в документации и предупреждаете разработчиков. Это даёт командам-потребителям время спокойно перейти на новую версию без авралов.

Безопасность и аутентификация

API открывает доступ к данным, а значит становится мишенью для злоумышленников. Первый рубеж — аутентификация: сервер должен понимать, кто именно отправил запрос. Для этого чаще всего используют токены. Стандарт OAuth 2.0 позволяет приложению получить ограниченный доступ от имени пользователя, не раскрывая его пароль, а формат JWT (JSON Web Token) удобно переносит подписанные сведения о владельце.

После аутентификации идёт авторизация — проверка, что этому пользователю разрешено именно это действие. Частая уязвимость возникает, когда сервер проверяет, что человек вошёл в систему, но забывает проверить, что запрошенный ресурс принадлежит именно ему. В результате, подставив чужой идентификатор в URL, злоумышленник читает чужие данные. Это одна из самых распространённых ошибок из списка OWASP API Security Top 10.

  • всегда используйте HTTPS, чтобы данные и токены нельзя было перехватить;
  • ограничивайте частоту запросов (rate limiting) против перебора и перегрузки;
  • проверяйте и «очищайте» все входные данные, не доверяя клиенту;
  • выдавайте минимально необходимые права доступа, а не «всё сразу».

Документация и удобство для разработчика

API хорош ровно настолько, насколько легко его понять другому инженеру. Даже безупречно спроектированный интерфейс останется невостребованным, если к нему нет ясной документации. Отраслевым стандартом стала спецификация OpenAPI (ранее известная как Swagger): она в машиночитаемом виде описывает все эндпоинты, параметры и форматы ответов.

Из спецификации OpenAPI автоматически генерируются интерактивная документация, клиентские библиотеки на разных языках и наборы тестов. Разработчик может прямо в браузере отправить пробный запрос и увидеть ответ, не написав ни строчки кода. Такой подход, когда контракт описывается раньше реализации, называют «design-first» — сначала договор, потом код.

Помимо формального описания важны продуманные сообщения об ошибках. Ответ вида «400 Bad Request» без пояснений раздражает; ответ, который указывает, какое именно поле не прошло проверку и почему, экономит часы отладки. Забота о разработчике-потребителе (developer experience) — такая же часть проектирования, как и выбор структуры данных.

Типичные ошибки и практические советы

Начинающие инженеры часто проектируют API «изнутри наружу», просто открывая наружу структуру своих таблиц в базе данных. Это привязывает клиентов к деталям хранения и делает любую реорганизацию болезненной. Правильнее идти «снаружи внутрь»: сначала подумать, какие сценарии решает клиент, и спроектировать интерфейс под них, скрыв внутреннюю кухню.

Другая распространённая проблема — непоследовательность. Если в одном месте поле называется userId, в другом user_id, а в третьем uid, разработчики постоянно спотыкаются. Единые соглашения об именах, форматах дат (лучше всего ISO 8601) и структуре ошибок стоит зафиксировать в едином руководстве по стилю ещё до написания первого эндпоинта.

Наконец, не забывайте о пагинации и лимитах. Эндпоинт, который возвращает «все записи», рано или поздно попытается отдать миллион строк и уронит сервер. Разбивка ответа на страницы, разумные значения по умолчанию и явные ограничения на объём выборки — признаки зрелого, промышленного API, готового к росту нагрузки.

Источники

  • Roy Fielding — автор диссертации, в которой был сформулирован архитектурный стиль REST.
  • OpenAPI Initiative — организация, поддерживающая спецификацию OpenAPI (Swagger).
  • OWASP Foundation — проект OWASP API Security Top 10 о типичных уязвимостях программных интерфейсов.
28.08.2026

Первокурсники кафедры ПИИТУ знакомятся с «ЕРАМ»

29 октября студенты 1-го курса кафедры программной инженерии и информационных технологий управления посетили офис крупнейшей украинской ІТ-компании «ЕРАМ». Ребята узнали об истории фирмы, направлениях, в которых она работает сегодня и актуальных вакансиях, которые они со временем смогут занять.

Продолжить чтение

04.11.2018

Кафедра ПИИТУ НТУ «ХПИ» – организатор митинга в рамках проекта MASTIS

25-26 октября на кафедре программной инженерии и информационных технологий управления НТУ «ХПИ» прошел митинг по проекту MASTIS, который посвящен улучшению магистерской программы в области информационных систем в соответствии с потребностями современного общества. В мероприятии приняли участие представители кафедры ПИИТУ, а также гости из других вузов – члены группы по реализации проекта: Марина Анатольевна Вовк, Ольга Юрьевна Чередниченко, Владимир Евгеньевич Сокол, Александр Витальевич Шматко и Михаил Дмитриевич Годлевский (НТУ «ХПИ»), Ирина Золотарева, Анна Плеханова, Алексей Беседовский (ХНЭУ им. С. Кузнеца), Евгений Паламарчук (ВНТУ), Татьяна Ковалюк и Юрий Олейник (НТУ «КПИ»), Борут Вербер (Университет Марибор, Словения), Римантас Батлерис (Каунасский университет, Литва), Пирфранко Равотто, (AICA Италия), Дженс Бранк (Универистет Мюнстер, Германия), Жан-Юг Шоша и Жером Дармонт (Универистет Лион-2, Франция).

Продолжить чтение

04.11.2018

«Визуальная математика» для школьников от кафедры ПИИТУ

25 октября в рамках проекта «Осенние каникулы с Политехом» доцент кафедры программной инженерии и информационных технологий управления Юлия Сергеевна Литвинова провела для школьников мастер-класс «Визуальная математика».

Продолжить чтение

29.10.2018

QA от “Quality” до “Assurance”

17.10.2018

Межвузовский обмен опытом в рамках проекта MASTIS

В рамках проекта MASTIS c 2 по 5 октября прошел митинг в Подгорице (Черногория). В мероприятии приняли участие представители кафедры программной инженерии и информационных технологий управления НТУ «ХПИ» – доценты Ольга Юрьевна Чередниченко и Марина Анатольевна Вовк.

Продолжить чтение

10.10.2018

Кафедра ПИИТУ готова к открытию инновационного центра

НТУ «ХПИ» и фонд K.Fund активно ведут работу по созданию инновационного центра – кампуса UNIT.City, сочетающего ИТ-обучение, школу предпринимательства и коворкинг. У кафедры программной инжнерии и информационных технологий управления НТУ «ХПИ» уже готовы учебные планы для проектного подхода к образованию, который будет реализовываться с привлечением возможностей  кампуса UNIT.City.

Продолжить чтение

08.10.2018

Начало пилотирования курса по проекту MASTIS

1 октября на кафедре программной инженерии и информационных технологий управления НТУ «ХПИ» стартовало пилотирование курса «Базы данных и хранилища данных» (преподаватель – доц., к.т.н. Владимир Евгеньевич Сокол), реализуемое в рамках международного проекта MASTIS.

Продолжить чтение

08.10.2018

Выпускники и сотрудники кафедры ПИИТУ получили дипломы на Ученом совете НТУ «ХПИ»

25 сентября на заседании Ученого совета НТУ «ХПИ» ректор НТУ «ХПИ» профессор Евгений Сокол вместе с Почетным ректором, председателем Ученого совета профессором Леонидом Товажнянским вручили дипломы отличившимся сотрудникам университета. В их числе – выпускники кафедры ПИИТУ Андрей Ткачук и Алексей Зиньковский, а также доцент кафедры, к.т.н. Карина Владимировна Мельник.
Продолжить чтение

04.10.2018

MASTIS (Establishing Modern Master-level Studies in Information Systems)

MASTIS

No. 561592-EPP-1-2015-1-FR-EPPKA2-CBHE-JP
Основные результаты проекта (НТУ ХПИ):
1. Совместно с университетами-партнерами разработаны профиль магистра информационных систем.
https://mastis.pro/wp-content/uploads/2018/06/MASTIS-WP3.-MASTER-in-IS-Degree-Profile_Ukraine.pdf
2. Разработан учебный план подготовки магистров по специальности Информационные системы и технологии.
http://web.kpi.kharkov.ua/asu/wp-content/uploads/sites/109/2018/02/NAVCHALNIJ-PLAN.pdf
3. Разработан учебный план для курса «Базы данных и хранилища данных».
https://mastis.pro/wp-content/uploads/2018/06/MASTIS-WP2.-Data-Bases-and-Data-Warehouses.pdf
4. Лицензирование новой учебной программы для подготовки магистров, разработанной в рамках проекта.
http://web.kpi.kharkov.ua/asu/spetsializatsii/
5. В рамках работы по проекту MASTIS 2 февраля 2017 проведен педагогический семинар “Прогрессивные образовательные технологии – распространение уроков, полученных в MASTIS” (докладчик Ольга Чередниченко, доцент кафедры SEMIT) .
https://mastis.pro/pedagogic-workshop-progressive-educational-technologies-disseminating-lessons-learned-on-mastis-at-ntu-khpi-1-3-february-2017/
6. 28 июля 2017 состоялась рабочая встреча участников проекта MASTIS в НТУ “ХПИ”. Встреча была посвящена реализации решений, которые обсуждались на заседании в Киеве 26-27 июня. Особое внимание было уделено разработке учебных программ, заданий для курсов и магистерских проектив.
https://mastis.pro/working-meeting-of-the-participants-of-the-mastis-project-from-khnue-and-ntu-khpi/
7. 13 ноября 2017 в НТУ “ХПИ” состоялся пятый межвузовский семинар. На семинаре обсуждали тему “Проблемы подготовки специалистов в области информационных систем и технологий” .
https://mastis.pro/wp-content/uploads/2017/11/the-fifth-inter-university-workshop-NTU-Kh-Polytechnic-Institute-2-1.jpg
8. 15 января 2018 состоялась межвузовская встреча с участниками ХНЭУ и НТУ “ХПИ”. Основная цель встречи – обсудить принципы, содержание, порядок ведения магистерской программы и оценки базовых курсов представителями IT-бизнесу.
https://mastis.pro/mastis-inter-university-meeting-on-january-15-2018-between-simon-kuznets-kharkiv-national-university-of-economics-and-national-technical-university-kharkiv-polytechnic-institute/

Материалы по проекту MASTIS (Подробнее…)

 

14.09.2018

Второе высшее образование в области ІТ!

Магистратура «Программное обеспечение информационных систем» – это возможность для профессионалов, имеющих высшее образование, получить углубленные знания в наиболее востребованной современными работодателями сфере – информационные технологии, гибко подстраивая учебный процесс под свой ритм жизни. 
В связи с большим количеством лицензионных мест прием документов в магистратуру продлен до 10 сентября! 

Продолжить чтение

28.08.2018

Продолжаем набор в магистратуру в области ІТ!

Кафедра программной инженерии и информационных технологий управления НТУ «ХПИ» продолжает набор в магистратуру на ОП “Программное обеспечение информационных систем” (специальность 126 “Информационные системы и технологии”).
Данная программа – оптимальный вариант для тех, кто хочет “войти в ІТ” не имея базового образования и за 1.5 года получить необходимые навыки для старта успешной карьеры в сфере информационных систем и технологий.


Продолжить чтение

23.08.2018

«Информационные технологии поддержки принятия управленческих решений» – специальность ближайшего будущего

Образовательная программа «Информационные технологии поддержки принятия управленческих решений» (специальность 122 «компьютерные науки») предусматривает подготовку специалистов в области принятия решений в программной инженерии.

Продолжить чтение

19.07.2018

Кафедра ПИИТУ открыла набор на новую перспективную специальность

Сегодня кафедра программной инженерии и информационных технологий управления НТУ «ХПИ» является ведущим образовательным центром в сфере подготовки ІТ-специалистов и регулярно подтверждает этот высокий статус. Именно наша кафедра первая в НТУ «ХПИ» открыла набор на новую перспективную специальность в сфере ІТ – специальность 126 «Информационные системы и технологии».

Продолжить чтение

09.07.2018

На кафедре программной инженерии и информационных технологий управления впервые прошла защита магистров в рамках реализации Программы двойных дипломов НТУ «ХПИ» и Альпен-Адриа университета г. Клагенфурт

Международное сотрудничество с европейскими вузами является важным аспектом деятельности кафедры программной инженерии и информационных технологий управления (ПИИТУ).
Так, например, Альпен-Адриа университет (Alpen-Adria University of Klagenfurt: https://www.aau.at/ ) г. Клагенфурт (Австрия) является один из давних вузов-партнеров кафедры, сотрудничество с которым началось еще в 1998г.


Продолжить чтение

09.07.2018

7-ое заседание межвузовского семинара – обсуждение создания научно-образовательного IТ-сообщества

22 июня 2018 в НТУ «ХПИ» прошло 7-е заседание научно-практического семинара, посвященного актуальным проблемам в области информационных технологий. Заседание было посвящено актуальной инициативе, которая уже получила поддержку украинского IТ-сообщества – созданию украинской научно-образовательной IТ-ассоциации.

Продолжить чтение

04.07.2018

Преподаватели кафедры ПИИТУ приняли участие в международной конференции COLInS’2018

Представители кафедры ПИИТУ приняли участие в конференции Computational Linguistics and Intelligent Systems Conference  (COLInS’2018), которая проходила во Львове 25-27 июня.


Продолжить чтение

02.07.2018

Защита 5 курс

05.06.2018

Профессор Университета Клагенфурта посетила НТУ «ХПИ»

В мае, во время Всеукраинского фестиваля науки, в Национальном техническом университете «Харьковский политехнический институт» прошла XXVI Международная научно-практическая конференция «Информационные технологии: наука, техника, технология, образование, здоровье» (MicroCAD-2018). В рамках конференции НТУ «ХПИ» посетили многие иностранные ученые, в том числе – Ph.D. Bianca Violetta Kos, лектор академической службы Австрии по обмену студентами и преподавателями, которая приехала в НТУ “ХПИ” по приглашению ректората.

Продолжить чтение

04.06.2018

Заведующий кафедрой ПИИТУ принял участие в круглом столе, посвященном Ассоциации ИТ-кафедр.

14 мая в Киеве в рамках международной конференции ICTERI состоялся круглый стол «Ассоциация для ИТ-кафедр украинских вузов», в котором приняли участие сотрудники ведущих образовательных центров Украины. Заведующий кафедрой ПИИТУ д.т.н., проф. Михаил Дмитриевич Годлевский в ходе круглого стола рассказал о положительном опыте участия кафедры ПИИТУ в международном проекте MASTIS, который способствовал взаимодействию вуза с ИТ-индустрией и реализации программ мобильности.

Продолжить чтение

24.05.2018

Иностранные коллеги в гостях на кафедре ПИИТУ

19 апреля 2018 на кафедре ПИИТУ состоялась встреча с доцентом университета Лион 2 (Associate Professor in Computer Science, University of Lyon, Lyon 2, France), участником проекта MASTIS (https://mastis.pro/) Фадилой Бентиба (Fadila Bentayeb).

Продолжить чтение

03.05.2018

Что ждут компании от ІТ-специалистов?

В современном мире требования к работникам любой отрасли достаточно динамичны и, безусловно, в первую очередь, это касается специалистов сфера информационных технологий. Каждый год, а для некоторых направлений даже чаще, меняются запросы ІТ-компаний относительно персонала. Портал DOU провел небольшой опрос украинских IT-компаний о том, какие технологии и навыки будут востребованы в этом году и какие требования будут предъявляться непосредственно к специалистам уровня junior.

Продолжить чтение

02.05.2018
Войти