Разделы презентаций


Публичные контракты, как обеспечить их согласованность

Содержание

Изменение контрактов

Слайды и текст этой презентации

Слайд 1Публичные контракты, как обеспечить их согласованность
Романюк Антон

Публичные контракты,  как обеспечить их согласованностьРоманюк Антон

Слайд 3Изменение контрактов

Изменение контрактов

Слайд 4Изменение контрактов

Изменение контрактов

Слайд 5Нужно что-то предпринять

Нужно что-то предпринять

Слайд 6Нужно что-то предпринять

Нужно что-то предпринять

Слайд 7Как сделать так, чтобы такое больше не повторялось

Как сделать так,  чтобы такое больше не повторялось

Слайд 8Экосистема Sungero

Экосистема Sungero

Слайд 9Экосистема Sungero

Экосистема Sungero

Слайд 10Экосистема Sungero

Экосистема Sungero

Слайд 11Проблема. В каждом сервисе своя реализация клиента StorageServiceClientProxy

Проблема. В каждом сервисе своя реализация клиента StorageServiceClientProxy

Слайд 12Проблема. В каждом сервисе своя реализация клиента StorageServiceClientProxy

Проблема. В каждом сервисе своя реализация клиента StorageServiceClientProxy

Слайд 13Постановка задачи

Постановка задачи

Слайд 14Постановка задачи

Постановка задачи

Слайд 16Инструменты
RPC
REST

ИнструментыRPCREST

Слайд 17REST vs RPC

REST vs RPC

Слайд 33Где расположить контракты? Как осуществить доступ сервисов к контрактам?

Где расположить контракты? Как осуществить доступ сервисов к контрактам?

Слайд 34Где расположить контракты? Как осуществить доступ сервисов к контрактам?

Где расположить контракты? Как осуществить доступ сервисов к контрактам?

Слайд 35В какой момент выполнять генерацию?

В какой момент выполнять генерацию?

Слайд 36В какой момент выполнять генерацию?

В какой момент выполнять генерацию?

Слайд 37Где расположить код клиента?

Где расположить код клиента?

Слайд 38Где расположить код клиента?
Где расположить код клиента?

Где расположить код клиента?Где расположить код клиента?

Слайд 39Где расположили код клиента

Где расположили код клиента

Слайд 40Детали реализации

Детали реализации

Слайд 41DescriptionController.cs
[Route("[controller]")]
[ApiController]
public class DescriptionController : ControllerBase {
[OpenApiOperation("GetDescription")]
[ProducesResponseType(typeof(ConversionDescription), 200)]
[ProducesResponseType(401)]
[ProducesResponseType(403)]
[HttpGet("{pluginName}/{binaryDataId}")]
public ActionResult GetDescription(
string pluginName,

Guid binaryDataId) { // код... }

DescriptionController.cs[Route(

Слайд 42FileController.cs
[Route("[controller]")]
[ApiController]
public class FileController : ControllerBase {
[OpenApiOperation("SaveFile")]
[ProducesResponseType(401)]
[ProducesResponseType(403)]
[HttpPost("{pluginName}/{binaryDataId}/{fileName}")]
[FileUploadOperation]
public async Task SaveFile() {

// код... }

FileController.cs[Route(

Слайд 43Процессор

Процессор

Слайд 44Конфигурация Nswag.json
"runtime": "NetCore22",
"documentGenerator": { "webApiToOpenApi": {
"defaultUrlTemplate": "api/{controller}/{id?}",
"infoTitle": "PreviewStorage", "infoVersion":

"1.0.0",
"documentName": "v1","allowNullableBodyParameters": true,
"output": "../../api-docs/PreviewStorage_swagger.json",
"outputType": "OpenApi3",
"assemblyPaths": [
"../../bin/$(Configuration)/PreviewStorage/netcoreapp2.2/PreviewStorage.dll“ ], } },
"codeGenerators": {

"openApiToCSharpClient": { "input": "../../api-docs/PreviewStorage_swagger.json",
"namespace": "PreviewStorage.WebApiProxy",
"generateClientInterfaces": true,
"useHttpRequestMessageCreationMethod": true,
“httpClientType": "System.Net.Http.HttpClient",
"additionalNamespaceUsages": [ "PreviewService.Common.Model“ ],
"output": "../PreviewStorage.WebApiProxy/PreviewStorageProxy.g.cs",
"className": "{controller}PreviewStorageProxy",
"operationGenerationMode": "SingleClientFromOperationId“ } } }
Конфигурация Nswag.json

Слайд 45Как добавили поддержку JWT

Как добавили поддержку JWT

Слайд 46Как добавили поддержку JWT

Как добавили поддержку JWT

Слайд 47Как добавили поддержку JWT

Как добавили поддержку JWT

Слайд 48Как добавили поддержку JWT

Как добавили поддержку JWT

Слайд 49Вывод

Вывод

Слайд 50Вывод

Вывод

Слайд 51Версионирование

Версионирование

Слайд 52Изменение
контрактов
Команда сервиса поставщика сама исправляет сервисы потребители.
Без версионирования
Варианты

решения

Изменение контрактовКоманда сервиса поставщика сама исправляет сервисы потребители. Без версионированияВарианты решения

Слайд 53Изменение
контрактов
Плохо работает:
Разные репозитории
Нет компетенций
Варианты решения

Изменение контрактовПлохо работает:Разные репозиторииНет компетенцийВарианты решения

Слайд 54Изменение
контрактов
Команда сервиса поставщика оставляет предыдущую версию контрактов
Варианты решения

Изменение контрактовКоманда сервиса поставщика оставляет предыдущую версию контрактовВарианты решения

Слайд 55Версионирование

Версионирование

Слайд 56Версионирование

Версионирование

Слайд 57Версионирование

Версионирование

Слайд 58Версионирование

Версионирование

Слайд 59Когда вводить новую версию

Когда вводить новую версию

Слайд 60Тестирование контрактов

Тестирование контрактов

Слайд 61Consumer driven contracts

Consumer driven contracts

Слайд 64Спасибо за внимание!
Разработчик Directum
в г. Уфа Романюк Антон

romanyuk_aa@directum.ru

Спасибо за внимание!Разработчик Directumв г. Уфа Романюк Антонromanyuk_aa@directum.ru

Слайд 65REST + gRPC

REST + gRPC

Слайд 66Настройка csproj

Настройка csproj

Слайд 67Как CDC можно встроить в CI

Как CDC можно встроить в CI

Слайд 68Процессор
public class FileUploadOperationAttribute : OpenApiOperationProcessorAttribute {
public FileUploadOperationAttribute() : base(typeof(FileUploadOperationProcessor)) {

} }

public class FileUploadOperationProcessor : IOperationProcessor {
public bool Process(OperationProcessorContext context)

{
var parameters = context.OperationDescription.Operation.Parameters;
parameters.Add(new OpenApiParameter() {
Name = "stream", Kind = OpenApiParameterKind.Body,
Schema = new JsonSchema { Type = JsonObjectType.String, Format = "binary" },
IsRequired = true, Description = "Файл.",
});
return true; } }
Процессорpublic class FileUploadOperationAttribute : OpenApiOperationProcessorAttribute {public FileUploadOperationAttribute() : base(typeof(FileUploadOperationProcessor)) { } }public class FileUploadOperationProcessor : IOperationProcessor {public

Слайд 69WSDL
Language, platform, and transport independent (REST requires use of HTTP) 

   
Works well in distributed enterprise environments (REST assumes direct

point-to-point communication)
Standardized
Provides significant pre-build extensibility in the form of the WS* standards
Built-in error handling
Automation when used with certain language products

WSDLLanguage, platform, and transport independent (REST requires use of HTTP)     Works well in distributed enterprise environments

Слайд 70Версионирование

Версионирование

Слайд 72https://servicesblog.redhat.com/2019/01/31/comparing-openapi-with-grpc/
https://docs.microsoft.com/en-us/aspnet/core/grpc/comparison?view=aspnetcore-3.1
https://blog.maddevs.io/introduction-to-grpc-6de0d9c0fe61
https://github.com/Azure/openapi-diff
https://www.davidkaya.com/with-openapi-against-breaking-changes/
https://github.com/grpc/grpc-web/issues/517 не подойдет для передачи больших файлов
https://developers.google.com/protocol-buffers/docs/techniques?hl=en#large-data сообщения не больше

1 мб
https://app.swaggerhub.com/help/integrations/api-auto-mocking

https://servicesblog.redhat.com/2019/01/31/comparing-openapi-with-grpc/https://docs.microsoft.com/en-us/aspnet/core/grpc/comparison?view=aspnetcore-3.1https://blog.maddevs.io/introduction-to-grpc-6de0d9c0fe61https://github.com/Azure/openapi-diffhttps://www.davidkaya.com/with-openapi-against-breaking-changes/https://github.com/grpc/grpc-web/issues/517 не подойдет для передачи больших файловhttps://developers.google.com/protocol-buffers/docs/techniques?hl=en#large-data сообщения не больше 1 мбhttps://app.swaggerhub.com/help/integrations/api-auto-mocking

Слайд 74PACT и OpenAPI (REST)
PACT и gRPC
PACT и Message Queues

PACT и OpenAPI (REST)PACT и gRPCPACT и Message Queues

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика