Rest API от чайника для чайников

06.06.22

Интеграция - WEB-интеграция

На написание статьи побудило чтение книги "Технологии интеграции "1С:Предприятия 8.3"" Хрусталевой Е.Ю. В первой главе там постоянно чередуются слова REST, REST-интерфейс, архитектура REST и т.д. Мне стало интересно, я начал копать, что это такое, и тема оказалась достаточно интересной.

Начнём с некоторых определений

Перед тем, как дать определение REST API, нужно ввести несколько общих определений.

Архитектурный стиль – это набор согласованных ограничений и принципов проектирования, позволяющий добиться определённых свойств системы

API (Application programming interface) - программный интерфейс приложения для взаимодействия с другими приложениями.

Вот теперь можно давать определение REST API.

REST API (Representational State Transfer, передача состояния представления) - архитектурный стиль разработки API веб-приложений или компонентов распределённого приложения, используя протокол HTTP.

Другими словами, REST API - это набор правил, позволяющий программисту добиться неких целевых свойств API своего приложения. Что же это за свойства?

 
Краткая историческая справка

Целевые свойства REST API

  • Производительность
  • Масштабируемость, выраженная в:
    • простота **унифицированного** интерфейса
    • лёгкость внесения изменений, т.е. способность эволюционировать, приспосабливаясь к новым требованиям
    • надёжность / отказоустойчивость
    • переносимость компонентов

Получается, что REST API потребовался, так как возникла потребность создавать производительные, надежные и легко поддающиеся изменению обмены между клиентом и сервером. За счёт чего же это достигается?

Принципы построения REST API

Существует 6 **принципов**, которым должен соответствовать REST-интерфейс:

  1. единый интерфейс - ресурсы должны быть однозначно идентифицированы посредством одного URL-адреса
  • н-р: неверно чтобы для одно и того же объекта для разных HTTP-запросов были разные интерфейсы
GET ...\getusers
PUT ...\createusers
  •  верно - когда интерфейс один, а что делать определяется видом запроса
GET ...\users
PUT ...\users
  1. Всегда использовать клиент-серверное взаимодействие и разграничивать данные между ними
  • пользовательский интерфейс и вопросы сбора запросов — на стороне клиента.
  • доступ к данным, управление рабочей нагрузкой и безопасность — на стороне сервера.
  1. Использовать Stateless protocol (протокол без сохранения состояния) - в период, между запросами никакая информация о *состоянии* клиента на сервере не хранится
  •  Следствие: в запросе сервер должен получать всю необходимую информацию для выполнения этого запроса
  1. Использовать кэширование - все ресурсы должны разрешать кэширование, если явно не указано, что оно невозможно, следовательно, все ответы сервера должны иметь явные или неявные обозначения кэшируемых и не кэшируемых ответов
  2. Учитывать слои взаимодействия - система может быть многоуровневой, и как следствие клиент не может однозначно знать взаимодействует он напрямую с сервером или с промежуточным узлом
  3. Код по требованию (необязательное условие) - REST может позволить расширить функциональность клиента за счёт загрузки кода с сервера (апплеты или скрипты)

REST и RESTful - в чём разница?

Термин RESTful был введён, чтобы различать сервисы, построенные чётко по шести указанным выше требованиям, от тех, которые соблюдают только часть  требований.

RESTful - это приложение, в котором соблюдаются все требования к построению архитектуры REST API. По поводу этого см. чуть ниже в раздел "Недостатки и критика REST API"

Стандарты REST API

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

Недостатки и критика REST API

  • завязка на HTTP, спецификация которого имеет свои ограничение
    • иногда это приводит к тому, что приходит эмитировать поведение некоторых специфических методов
  • ограничения выборки, наложенные создателем интерфейса API
    • чрезмерная выборка - н-р: есть сервис, которые возвращает контактные данные пользователя. Нам надо получить только имя, но сервис настроен на возврат имени, телефона и т.д.
    • недостаточная выборка - например сервис, упомянутый выше, возвращает только телефон по умолчанию, а нам нужны все доступные телефоны
  • Отсутствие однозначного понимания, что такое RESTful. А без этой ясности сложно сравнить сервисы и дать однозначный ответ - правильно ли спроектирован сервис или нет.
    • Достаточно ли использовать код HTTP-ответа 200 при создании записи или надо использовать 201?
    • Достаточно ли использовать код HTTP-ответа 200 при обновлении записи или надо использовать 250?

REST API в 1С

Долго на этом останавливаться не буду, просто обзорно распишу. В 1С можно выделить следующие способы работы с REST:

  • создавать свой REST API (метаданные "Общие - HTTP-сервис")
  • обратиться к любому REST API (методы встроенного языка: HTTPСоединение, HTTPзапрос, HTTPОтвет)
  • взаимодействовать с автоматически генерируемый REST-интерфейсом платформы (см. Автоматический REST-интерфейс через протокол OData)

Выводы

В данной статье я постарался дать определение и описание того, что такое REST API. Недаром говорят, что если хочешь до конца понять термин или технологию - постарайся рассказать о ней другому человеку, что в данной статье и проделано ^_^.

Напоследок отмечу, что главный плюс REST - это простота, именно поэтому он долгое время являлся самым популярным стандартом для организации взаимодействия клиента и сервера. Является ли он таким на данный момент, ответить сложно, ибо есть множество интересных альтернатив: старенький, но надёжный, SOAP, передовой GraphQL, RPC, JSON-pure API и многое другое.

Вступайте в нашу телеграмм-группу Инфостарт

REST API WEB

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    21737    30    24    

24

SALE! 15%

WEB-интеграция Программист Бизнес-аналитик 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17280 14688 руб.

20.12.2024    3957    18    2    

20

WEB-интеграция Программист Руководитель проекта 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки. Основные преимущества: 1. Документация API создаётся автоматически. Удобна для программной обработки. 2. Изменить API столь же просто как настроить отчёт. Можно опубликовать существующий вариант отчёта. 3. Отчёты в API поддерживают параметры (Период, ДатаНачала и др.) 4. При создании простых методов не требуется изменять конфигурацию. 5. Поддерживается работа с планами обмена.<br/> 6. Возможно настроить отправку из 1С данных корреспондирующей системе, для случаев когда 1С сама "знает" какие данные нужно отправить. 7. После записи в 1С Ле Мурр может возвращать соответствие полученных идентификаторов созданным в 1С объектам данных.

36000 руб.

27.09.2024    8589    7    5    

9

WEB-интеграция 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

В расширении реализован механизм интеграции между системой поставщика и Личным кабинетом СДТ. Реализован обмен заказами и реализациями (накладными), предусмотрено отслеживание статусов документов. Расширение предназначено для 1С:УТ 11.4.

35856 руб.

27.11.2024    2149    1    0    

1

Оптовая торговля WEB-интеграция Бюджетный учет Обмен с ГосИС Бухгалтер Пользователь 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Государственные, бюджетные структуры Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обмен данными с "Порталом поставщиков" zakupki.mos.ru Москвы и Московской области с целью создания оферт для закупок государственными учреждениями. Модуль устраняет рутину, минимизирует ошибки и помогает выигрывать больше закупок. Работает строго по требованиям 44-ФЗ.

14400 руб.

13.12.2016    41258    54    39    

37
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1775 09.07.22 11:11 Сейчас в теме
Вопрос от "чайника":
Фреймворки в целом рекомендуют использовать запросы видаА если использовать что-то видаэто нарушает принципы RESTfull API ?
2. zeltyr 728 11.07.22 17:34 Сейчас в теме
(1) Честно, у меня нет однозначного ответа на этот вопрос, могу изложить только свои скромные измышления.

Параметры обычно используются для сортировки и фильтрации данных (н-р: ?page=1&sort=title), или для ограничения области действия операции (н-р: ?action=delete&id=5). А для получения карточки по id лучше использовать вариант 1, как описывают стандарты фреймоворков, иначе могут появиться вопросы - а что делает этот сервис? может он выполняет какой-то специфический параметризуемый запрос, а не просто получение данных пользователя.

П.С. Указание на то, что лучше использовать синтаксис вида http://hostname/api/users/{id}/, есть ещё в различных соглашениях, н-р: Соглашения по Rest API (IBM)
Для отправки сообщения требуется регистрация/авторизация