Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
about-rest-support [2019/05/21 06:09] admin1 создано |
about-rest-support [2019/10/28 04:17] (текущий) admin1 |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Реализация поддержки REST ====== | ====== Реализация поддержки REST ====== | ||
- | Начнем с определения того, что означает REST в контексте X-Road. В отличие от протокола SOAP, который является протоколом с подробной спецификацией, REST - это архитектурный стиль, состоящий из лучших практик и рекомендаций. В случае с X-Road поддержка REST означает использование и создание REST API через X-Road поддерживающее любой тип HTTP контента. | + | Начнем с определения того, что означает [[https://ru.wikipedia.org/wiki/REST|REST]] в контексте X-Road. В отличие от протокола [[https://ru.wikipedia.org/wiki/SOAP|SOAP]], который является протоколом с подробной спецификацией, REST - это архитектурный стиль, состоящий из лучших практик и рекомендаций. В случае с X-Road поддержка REST означает использование и создание REST API через X-Road поддерживающее любой тип [[https://ru.wikipedia.org/wiki/HTTP|HTTP]] контента. |
Одним из руководящих принципов при разработке протокола сообщений REST для X-Road был принцип простоты использования как для поставщиков сервисов , так и для потребителей. Следовательно, использование и разработка REST сервисов для X-Road стала возможной без необходимости разработки дополнительного компонента адаптера. Информация, специфичная для X-Road, требуемая сервером безопасности (например, идентификатор клиента, идентификатор сервиса, идентификатор поставщика услуг, идентификатор сообщения и т.д), передается и обрабатывается, так что существующие службы и потребители услуг использующие REST могут быть подключены к X-Road с минимальными изменениями или без изменений вообще. Это было достигнуто путем выноса специфической информации X-Road, требуемой сервером безопасности, в заголовки HTTP и параметры URL. | Одним из руководящих принципов при разработке протокола сообщений REST для X-Road был принцип простоты использования как для поставщиков сервисов , так и для потребителей. Следовательно, использование и разработка REST сервисов для X-Road стала возможной без необходимости разработки дополнительного компонента адаптера. Информация, специфичная для X-Road, требуемая сервером безопасности (например, идентификатор клиента, идентификатор сервиса, идентификатор поставщика услуг, идентификатор сообщения и т.д), передается и обрабатывается, так что существующие службы и потребители услуг использующие REST могут быть подключены к X-Road с минимальными изменениями или без изменений вообще. Это было достигнуто путем выноса специфической информации X-Road, требуемой сервером безопасности, в заголовки HTTP и параметры URL. | ||
- | Поддержка REST в X-Road не ограничивается только сообщениями JSON и XML, поскольку сервер безопасности не ставит каких-либо ограничений для типа содержимого полезной нагрузки, передаваемой между потребителем и поставщиком сервисов. Тип содержимого полезной нагрузки определяется с в HTTP заголовках «Content-Type», который передается между потребителем и поставщиком сервиса, так же как и сама полезная нагрузка. Полезная нагрузка передается как есть, сервер безопасности не изменяет, не преобразует и не проверяет обработанную полезную нагрузку. То же самое относится почти ко всем заголовкам и параметрам URL определенным потребителем и поставщиком HTTP сервиса - то есть они передаются как есть Список фильтруемых HTTP заголовков включен в спецификацию протокола REST X-Road Message protocol | + | Поддержка REST в X-Road не ограничивается только сообщениями [[https://ru.wikipedia.org/wiki/JSON|JSON]] и [[https://ru.wikipedia.org/wiki/XML|XML]], поскольку сервер безопасности не ставит каких-либо ограничений для типа содержимого полезной нагрузки, передаваемой между потребителем и поставщиком сервисов. Тип содержимого полезной нагрузки определяется с в HTTP заголовках «Content-Type», который передается между потребителем и поставщиком сервиса, так же как и сама полезная нагрузка. Полезная нагрузка передается как есть, сервер безопасности не изменяет, не преобразует и не проверяет обработанную полезную нагрузку. То же самое относится почти ко всем заголовкам и параметрам URL определенным потребителем и поставщиком HTTP сервиса - то есть они передаются как есть Список фильтруемых HTTP заголовков включен в спецификацию протокола REST X-Road Message protocol |
Когда дело доходит до подписания и проверки подписи сообщений REST, полезная нагрузка сообщения, параметры URL и заголовки HTTP все включаются в цифровую подпись и журналы, генерируемые и проверяемые сервером безопасности. Следовательно, X-Road гарантирует подлинность REST запросов и ответов так же, как это делается для SOAP-сообщений. | Когда дело доходит до подписания и проверки подписи сообщений REST, полезная нагрузка сообщения, параметры URL и заголовки HTTP все включаются в цифровую подпись и журналы, генерируемые и проверяемые сервером безопасности. Следовательно, X-Road гарантирует подлинность REST запросов и ответов так же, как это делается для SOAP-сообщений. | ||
Строка 11: | Строка 11: | ||
====== Использование REST сервисов ====== | ====== Использование REST сервисов ====== | ||
- | Использовать REST-сервисы через X-Road просто - вызываемый сервис определяется в URL-адресе запроса, а клиентская подсистема X-Road, отправляющая запрос, определяется в HTTP-заголовке. Другая специфичная для X-Road информация (например, идентификатор пользователя, основание , идентификатор клиентской подсистемы, идентификатор сообщения) является необязательной и передается в HTTP заголовках . Другие HTTP заголовки, параметры пути и параметры URL передаются как есть, что означает, что с точки зрения клиента службы единственное отличие по сравнению с прямым вызовом сервиса единственный обязательный HTTP заголовок , определяющий клиентскую подсистему X-Road. | + | Использовать REST-сервисы через X-Road просто - вызываемый сервис определяется в [[https://ru.wikipedia.org/wiki/URL|URL]]-адресе запроса, а клиентская подсистема X-Road, отправляющая запрос, определяется в HTTP-заголовке. Другая специфичная для X-Road информация (например, идентификатор пользователя, основание , идентификатор клиентской подсистемы, идентификатор сообщения) является необязательной и передается в HTTP заголовках . Другие HTTP заголовки, параметры пути и параметры URL передаются как есть, что означает, что с точки зрения клиента службы единственное отличие по сравнению с прямым вызовом сервиса единственный обязательный HTTP заголовок , определяющий клиентскую подсистему X-Road. |
====== Предоставление REST сервисов ====== | ====== Предоставление REST сервисов ====== | ||
Предоставление сервисов REST через X-Road так же просто (если не проще), как и использование сервисов. Существующие службы REST могут публиковаться в X-Road как есть - достаточно добавить публикуемый базовый URL-адрес REST API и определить права доступа в интерфейсе Security Server. В отличие от сервисов SOAP, Security Server не требует, чтобы в ответах, возвращаемых сервисами REST, была указана специфическая информация X-Road. Определенная информация, относящаяся к X-Road, по-прежнему включена в ответное сообщение, возвращаемое в информационную систему клиента, но сервер безопасности позаботится о добавлении необходимой информации в HTTP заголовки ответного сообщения. | Предоставление сервисов REST через X-Road так же просто (если не проще), как и использование сервисов. Существующие службы REST могут публиковаться в X-Road как есть - достаточно добавить публикуемый базовый URL-адрес REST API и определить права доступа в интерфейсе Security Server. В отличие от сервисов SOAP, Security Server не требует, чтобы в ответах, возвращаемых сервисами REST, была указана специфическая информация X-Road. Определенная информация, относящаяся к X-Road, по-прежнему включена в ответное сообщение, возвращаемое в информационную систему клиента, но сервер безопасности позаботится о добавлении необходимой информации в HTTP заголовки ответного сообщения. | ||
+ | |||
====== Описание сервисов для REST ====== | ====== Описание сервисов для REST ====== | ||
- | В настоящее время службы SOAP должны быть описаны с использованием WSDL. Невозможно опубликовать сервис SOAP в X-Road, не предоставив WSDL описание сервиса. | + | В настоящее время службы должны быть описаны с использованием [[https://ru.wikipedia.org/wiki/WSDL|WSDL]]. Невозможно опубликовать сервис SOAP в X-Road, не предоставив WSDL описание сервиса. |
- | В первой версии X-Road, включающей поддержку REST (v6.21.0), описания REST сервисов не требуются. При добавлении новой службы REST достаточно предоставить базовый URL-адрес REST API для публикации. В более поздних версиях будет добавлена поддержка описания REST сервисов с использованием спецификации OpenAPI 3. | + | В первой версии X-Road, включающей поддержку REST (v6.21.0), описания REST сервисов не требуются. При добавлении новой службы REST достаточно предоставить базовый URL-адрес REST API для публикации. В более поздних версиях будет добавлена поддержка описания REST сервисов с использованием спецификации [[https://ru.wikipedia.org/wiki/OpenAPI_(%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F)|OpenAPI 3]]. |
Об автоматических преобразованиях SOAP-REST | Об автоматических преобразованиях SOAP-REST | ||
- | Сервисы должны использовать их собственные реализации - SOAP или REST. Если поставщик сервиса хочет предоставить SOAP и REST версии одного и того же сервиса, он должен реализовать обе версии. Другими словами, сервер безопасности не будет обеспечивать автоматическое преобразование SOAP в REST и обратно. В случае, если требуется автоматическое преобразование SOAP в REST, можно использовать расширение REST Adapter Service. REST Adapter Service - это готовый компонент, который предоставляет X-Road-совместимый конвертер REST-SOAP. Сервис поддерживает ограниченный набор вариантов использования. | + | Сервисы должны использовать их собственные реализации - SOAP или REST. Если поставщик сервиса хочет предоставить SOAP и REST версии одного и того же сервиса, он должен реализовать обе версии. Другими словами, сервер безопасности не будет обеспечивать автоматическое преобразование SOAP в REST и обратно. В случае, если требуется автоматическое преобразование SOAP в REST, можно использовать расширение [[https://github.com/nordic-institute/REST-adapter-service|REST Adapter Service]]. REST Adapter Service - это готовый компонент, который предоставляет X-Road-совместимый конвертер REST-SOAP. Сервис поддерживает ограниченный набор вариантов использования. |
====== Аутентификация между компьютерами ====== | ====== Аутентификация между компьютерами ====== | ||
- | Реализация REST поддерживает взаимную аутентификацию TLS между Сервером безопасности и потребителем/поставщиком услуг REST. Поддержка аутентификации на основе JWT (JSON Web Token) между Сервером безопасности и информационной системой может быть предоставлена в более поздних версиях. | + | Реализация REST поддерживает взаимную аутентификацию [[https://ru.wikipedia.org/wiki/TLS|TLS]] между Сервером безопасности и потребителем/поставщиком услуг REST. Поддержка аутентификации на основе [[https://ru.wikipedia.org/wiki/JSON_Web_Token|JWT]] (JSON Web Token) между Сервером безопасности и информационной системой может быть предоставлена в более поздних версиях. |
Однако уже возможно использовать аутентификацию на основе JWT между клиентом сервиса и поставщиком сервиса. Как описано выше, сервер безопасности передает все HTTP-заголовки между потребителем и поставщиком услуг как есть, поэтому нет ограничений для реализации аутентификации на основе JWT на уровне приложения. | Однако уже возможно использовать аутентификацию на основе JWT между клиентом сервиса и поставщиком сервиса. Как описано выше, сервер безопасности передает все HTTP-заголовки между потребителем и поставщиком услуг как есть, поэтому нет ограничений для реализации аутентификации на основе JWT на уровне приложения. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Автор С.Бутенко |