недавно я по работе писал обращение к REST-сервису - так я был , прям, неприятно удивлен: столько мороки! я привык, что, когда работаешь через SOAP/WSDL, указываешь IDEшке URL сервиса, у тебя волшебным образом появляются прокси-классы, просто создаешь экземпляр класса, вызываешь метод - все!
а тут же все ручками прописывать! всю сериализацию! и классы! а если там POCO с несколькими уровнями вложенности - на C# это вообще ад!
в общем, решил я выяснить, есть ли альтернатива. и, оказалось, есть!
спецификация называется Swagger. или это ее реализация? новое название ее - OpenAPI. или swagger - просто одна из ее реализаций? есть спецификация, и много реализаций. и называется это все Swagger/OpenAPI.
чтоб оно заработало - нужно вручную прикрутить поддержку Swagger на стороне Rest-сервиса. а потом воспользоваться Swagger-клиентом на уровне Visual Studio.
я читал об этом вот тут:
в этих статьях предлагается 2 подхода, реализующие примерно одно и то же. я для себя решил остановиться на следующем:
- для поддержки Swagger на стороне Rest-сервиса меня вполне устроило использование Swashbuckle
- если нужен C#-клиент, и не нужно тонкой настройки прокси-классов - можно использовать встроенный в вижуал-студию механизм: Connected Services - Add connected service - Service References (OpenAPI, ...) . ну и там разберетесь. этот подход хорош тем, что сгенерированные классы появляются в папке "obj". собственно, в качестве исходдика в Git попадает только один JSON-файл со swagger-описанием сервиса
- если нужна тонкая настройка прокси-классов или помимо C#-прокси нужны еще и TypeScript-прокси - тогда нам на помощь приходит Unchase OpenAPI. там столько настроек, что аж страшно становится! я все сделал, в основном, по дефолту :)
я изучал вопрос для .net core 3.1, но, думаю, должна быть поддержка и для .net framework
работал на Visual Studio 2019 Community Edition
работающие тестовые приложения есть в моем тестовом репозитории:
ветка Swagger__Swashbuckle - п.1 в списке выше
ветка Swagger_NSwag_Client - п.2 в списке выше
ветка Swagger_UnchaseClient - п.3 в списке выше
ветка Swagger__NSwag_Server - альтернативный способ поддержки Swagger на стороне сервера