swagger client generator для C#
От: vaa  
Дата: 04.03.22 03:15
Оценка:
Мучаюсь с сервисом https://restapi.moedelo.org/docs
в схеме стоит "swagger":"2.0"
методов много какие понадобятся непонятно.
Нашел несколько инструментов, но все какие-то странные.

Например Nswag Studio уже давно вроде идет разработка.

Но генерит как-то странно, выбираю System.Text.Json, но на выходе NewtoneSoft.Json.
и не понимает когда надо стрим получить (void методы).
ну это скорее всего решается наследованием и допиливанием.
дублируются перечисления. отсутствуют базовые классы типа ApiException.
Такое даже после доводки до состояния сборки страшно использовать, вдруг придется перегерировать.
А там одна схема больше мегабайта. Студии реально плохо становится от портянки в 5М+.

swagger-codegen-cli-3.0.33.jar

это честно что-то генерит но в процессе падает с ошибкой nio
(путь к файлу не нравится, толи имя длинное получается то ли что, вероятно из-за генериков).

openapi-generator-cli-5.4.0.jar

это не проходит валидацию, если ее отключить тоже падает с похожей ошибкой.
Что самое обидное, для java или typescript генерится в легкую.


Полноценно справился только https://fsprojects.github.io/SwaggerProvider/

Причем необновляемый уже SwaggerClientProvider
а рекомендуемый и более новый OpenApiClientProvider также валится на валидации.

Проблема только в том что он работает только в F#.
Подключил к C#, но тот видит только словари вместо типов.
Т.е. по сути возврат к исходной точке.

У кого есть опыт борьбы с подобными монстрами, может гайд хороший?


PS Написал разрабам сего чуда(т.к. по сигнатурам видно что сервис на C#),
но там случилась прослойка в виде ТП.
Передали просьбу поделится C#-клиентом. Жду.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: swagger client generator для C#
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 04.03.22 05:11
Оценка: 10 (1)
Здравствуйте, vaa, Вы писали:

vaa>У кого есть опыт борьбы с подобными монстрами, может гайд хороший?

Некоторое время назад пользовался https://github.com/Azure/AutoRest.
Результат меня устроил, но:
— у меня был очень небольшой проект (с десяток моделей и столько же методов)
— это было года 3-4 назад. С тех пор проект серьезно переписывали, например, переходили на новую версию спецификации OpenAPI, так что не могу сказать что там сейчас (скажем, на сколько поддерживаются предыдущие версии swagger).
Re[2]: swagger client generator для C#
От: vaa  
Дата: 04.03.22 08:04
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, vaa, Вы писали:


vaa>>У кого есть опыт борьбы с подобными монстрами, может гайд хороший?

МР>Некоторое время назад пользовался https://github.com/Azure/AutoRest.
МР>Результат меня устроил, но:
МР>- у меня был очень небольшой проект (с десяток моделей и столько же методов)
МР>- это было года 3-4 назад. С тех пор проект серьезно переписывали, например, переходили на новую версию спецификации OpenAPI, так что не могу сказать что там сейчас (скажем, на сколько поддерживаются предыдущие версии swagger).

К сожалению на этом монстре (более 700 методов) autorest спотыкается о схему. куча не валидных ошибок.
при этом nswag вот генерить,
но там вот такие классы ApiDataResponseDto_1OfOfTaxPostingsResponseDtoAndApiAnd_0AndCulture_neutralAndPublicKeyToken_null
и методы имеются криво List1, List2 вместо ListPushcase, ListBill ...
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: swagger client generator для C#
От: Danchik Украина  
Дата: 04.03.22 20:31
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Михаил Романов, Вы писали:


МР>>Здравствуйте, vaa, Вы писали:


vaa>>>У кого есть опыт борьбы с подобными монстрами, может гайд хороший?

МР>>Некоторое время назад пользовался https://github.com/Azure/AutoRest.
МР>>Результат меня устроил, но:
МР>>- у меня был очень небольшой проект (с десяток моделей и столько же методов)
МР>>- это было года 3-4 назад. С тех пор проект серьезно переписывали, например, переходили на новую версию спецификации OpenAPI, так что не могу сказать что там сейчас (скажем, на сколько поддерживаются предыдущие версии swagger).

vaa>К сожалению на этом монстре (более 700 методов) autorest спотыкается о схему. куча не валидных ошибок.

vaa>при этом nswag вот генерить,
vaa>но там вот такие классы ApiDataResponseDto_1OfOfTaxPostingsResponseDtoAndApiAnd_0AndCulture_neutralAndPublicKeyToken_null
vaa>и методы имеются криво List1, List2 вместо ListPushcase, ListBill ...

Выбираем лучший, берем сурцы, запускаем под дебагом, правим что не нравится или наоборот находим точки расширения не правя исходники.
Иначе этот поиск никогда не закончится.
Re[4]: swagger client generator для C#
От: vaa  
Дата: 05.03.22 02:03
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Выбираем лучший, берем сурцы, запускаем под дебагом, правим что не нравится или наоборот находим точки расширения не правя исходники.

D>Иначе этот поиск никогда не закончится.

Ну, лучший пока только nswag, он хоть что-то генерит (типы и сигнатуры), но видимо придется выковыривать только необходимо из сырцов.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: swagger client generator для C#
От: vaa  
Дата: 20.05.22 08:05
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Мучаюсь с сервисом https://restapi.moedelo.org/docs


Итог(ответ ТП):

По вашему запросу XXXX Интеграция по API разработчики сообщили следующее:
У нас нет автоматической генерации по swagger-json.Вы можете попробовать что-то типа
https://github.com/Azure/autorest.Норазработчики сказали, что проще вручную написать клиент на C#


☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: swagger client generator для C#
От: maxkar  
Дата: 22.05.22 09:24
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>но там вот такие классы ApiDataResponseDto_1OfOfTaxPostingsResponseDtoAndApiAnd_0AndCulture_neutralAndPublicKeyToken_null


А в чем здесь проблема? Там в swagger есть (в definitions)
Moedelo.TaxPostings.Api.Models.TaxPostingsResponseDto`1[[Moedelo.TaxPostings.Api.Models.ITaxPostingDto, Moedelo.TaxPostings.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

Вот от него такое и генерируется. А самое страшное вообще
Moedelo.TaxPostings.Api.Models.ApiDataResponseDto`1[[Moedelo.TaxPostings.Api.Models.TaxPostingsResponseDto`1[[Moedelo.TaxPostings.Api.Models.ITaxPostingDto, Moedelo.TaxPostings.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Moedelo.TaxPostings.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

Это именно "имя модели" (т.е. обычно соответствует имени класса). Так что генератор как раз хорош — не падает на "произвольных" схемах и пытается сделать более-менее осмысленный результат. А другие написаны для работы в условиях hello, world, и просто падают.
Re[2]: swagger client generator для C#
От: maxkar  
Дата: 22.05.22 09:48
Оценка: 5 (1)
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, vaa, Вы писали:


vaa>>Мучаюсь с сервисом https://restapi.moedelo.org/docs


vaa>Итог(ответ ТП):

vaa>

Т.е. поддержка нашла и спросила ведущего разработчика. Перевожу. Документация не слишком высокого качества (от себя — но и не ужас-ужас, разработчики стараются и поля описывают, бывает намного хуже). Ее можно использовать для того, чтобы посмотреть на список полей и выбрать то, что вам нужно. И API там явно не является предметом гордости, может потребоваться специальная обработка каких-то отдельных случаев.

Наиболее вероятноя предистория. Какой-то административный гений решил, что swagger — это круто и нужно автогенерировать дескрипторы для всех API. Не посоветовавшись с теми, кто ведет настоящую разработку. И, естественно, не контролируя, что документация получается более-менее приличной. Поэтому команды пишут минимум, необходимый для получения автоматической галочки. Почему команды? Да потому, что там несколько стилей API (использование строчных/прописных, например, сразу бросается в глаза). Ведущим инженерам тоже не до вылизывания swagger'а. Там масса других проблем, которые стоило бы подтянуть вначале. Ну например, /stock/api/v1/abcReport/download на GET-запрос может возвращать HTTP 422 "Unprocessable entity" .

Еще от себя добавлю. С точки зрения разработчиков клиент, который не может написать простой http-вызов (структуры данных в API вроде вменяемые) — это очень большие потенциальные проблемы. Придется много его обучать и делать какие-то вещи за него. Не говоря уже о каких-то специальных случаях. Ну например, какие есть узкие места при высокой нагрузке и автосгенерированного клиента? Я часто вижу, как производительность упирается в max connections per host на уровне http-клиента. Именно низкоуровнего клиента! Если код написан вручную, настройку можно подкрутить. А вот в автосгенерированных классах это может оказаться очень веселой задачей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.