Генераторы строго типизированных клиентских веб-API генерируют коды клиентских API на C# и TypeScript из веб-API ASP.NET (Core) напрямую, без использования Swagger/OpenAPI или Swashbuckle, что максимально увеличивает поддержку типов данных вашего подхода Code First в веб-API ASP.NET. .
Продукты
Этот проект предоставляет следующие продукты:
- Генератор кода для строго типизированного клиентского API на C# с поддержкой .NET и Xamarin.Forms.
- Генераторы кода для строго типизированного клиентского API в TypeScript для jQuery, Angular 2+, Aurelia, Axios и Fetch API.
- TypeScript CodeDOM — компонент .NET CodeDOM для TypeScript, предназначенный для разработки генераторов кода TypeScript.
- POCO2TS.exe — программа командной строки, которая генерирует интерфейсы TypeScript из классов POCO.
- Fonlow.Poco2Ts — компонент, который генерирует интерфейсы TypeScript из классов POCO.
- Плагины для jQuery, AXIOS, Fetch API, Aurelia, Angular 2+, а также типизированных реактивных форм Angular.
- Fonlow.DataOnlyExtensions с преобразователями JSON для обработки сценариев только по дате между клиентами и сервером, которые находятся в разных часовых поясах. Также доступен пакет .NET Framework.
Варианты использования и загрузки
Продукты выпускаются в основном через NuGet.
- Создайте клиентский API C#, затем используйте пакет Fonlow.WebApiClientGenCore.
- Создайте клиентский API TypeScript, затем используйте один из плагинов Fonlow.WebApiClientGenCore:
- Вспомогательная библиотека jQuery и HttpClient
- Угловой 6+
- Angular 6+, плюс создание FormGroup для реактивных форм с описанием
- АКСИОС
- Аурелия
- Получить API
- Разработайте генератор кода TypeScript с помощью подхода CodeDOM, а затем используйте пакет Fonlow.TypeScriptCodeDOMCore.
- Разработайте генератор кода TypeScript с помощью подхода CodeDOM для POCO и других, затем используйте пакет Fonlow.Poco2TSCore или сценарии PowerShell 7.
- Создайте интерфейсы типа TypeScript, а затем используйте консольное приложение Poco2TSCore.exe.
- Разработайте функцию, которая считывает XML-документ сборки .NET, а затем используйте пакет Fonlow.DocCommentCore.
Подсказки:
- OpenApiClientGen, основанный на ключевых компонентах WebApiClientGen, представляет собой дополнительный продукт для генерации кодов клиентских API на C# и TypeScript в соответствии с файлом определения спецификации Swagger/Open API.
- WebApiClientGen не использует определения Swagger/OpenAPI, но генерирует коды на основе информации о типе времени выполнения работающего веб-API отладочной сборки, избавляясь от присущих OpenAPI ограничений по отношению к типам .NET и веб-API, чтобы обеспечить лучший опыт разработки для ASP. NET (Core) Разработчики веб-API.
Примечания:
- Разработка началась в 2015 году с поддержкой .NET Framework, затем .NET Core 2. А тег «LastCore31» предназначен для обозначения последнего моментального снимка с поддержкой .NET Framework 4.6.2 и .NET Core 3.1.
- Начиная с 10 февраля 2021 г., разработка будет поддерживать только .NET 5 и более поздние версии.
- Содержимое Wiki о .NET Framework в обозримом будущем будет сохранено.
Ключевые особенности
- Создаваемые коды клиентского API напрямую сопоставляются с методами контроллера веб-API, примитивными типами .NET и классами POCO. Это похоже на то, что предлагает svcutil.exe в WCF.
- Копируются комментарии к документам методов контроллера и классов POCO.
- Некоторые атрибуты проверки используются для создания комментариев к документам для кодов TypeScript.
Ключевые преимущества для опыта разработчиков
- WebApiClientGen легко интегрируется с веб-API ASP.NET Core с минимальными затратами на настройку, обслуживание и синхронизацию между веб-API и клиентскими API во время RAD или гибкой разработки программного обеспечения.
- Поддержка всех примитивных типов .NET, включая десятичные.
- Поддержка DataTime, DataTimeOffset, DateOnly, Array, Tuple, Dynamic Object, Dictionary и KeyValuePair
- Строго типизированные сгенерированные коды подлежат проверке типов во время разработки и проверке типов во время компиляции.
- Обеспечьте высокий уровень абстракции, защищая разработчиков приложений от повторяющихся технических деталей практик RESTful и традиционных кодов вызовов AJAX.
- Богатая метаинформация, включая комментарии к документации, делает IDE intellisense более полезной, поэтому разработчикам приложений меньше необходимости читать отдельные документы API.
- Сгенерированные комментарии к документу на основе атрибутов проверки .NET.
- Сгенерированные комментарии к документу на основе числовых типов, DateOnly и GUID для кодов TypeScript.
- Сгенерированные коды TypeScript соответствуют строгому режиму TypeScript, а сгенерированные коды Angular 2+ соответствуют строгому режиму Angular.
Примеры
- POCO-классы
- Веб-API
- Сгенерированные коды клиентского API C#
- Клиентские коды с использованием созданной библиотеки на C#
- Сгенерированные модели клиентских данных и API в TypeScript для jQuery, Angular 2, Aurelia и Axios.
- Клиентские коды с использованием сгенерированной библиотеки в TypeScript
- Онлайн-демо с Angular Heroes, размещенное на GitHub.IO, взаимодействующее с реальным бэкэндом
Примечания:
- Коды JavaScript, скомпилированные из сгенерированных кодов TypeScript, можно использовать в приложениях JS, однако, очевидно, что никакая информация о типе не будет доступна, в то время как программисты приложений по-прежнему могут наслаждаться интеллектом и абстракцией от деталей AJAX.
- Приложения React и Vue.js обычно используют Axios или Fetch API для HTTP-запросов. Благодаря этому запросу на извлечение с июня 2019 года Babel поддерживает пространства имен, поэтому вы сможете программировать React TSX с сгенерированными кодами TypeScript.
Концепции
- Поставщики/разработчики веб-API должны предоставлять библиотеки клиентских API разработчикам клиентских программ, как это сделали бы Google, Amazon и т. д., чтобы веб-API RESTful мог эффективно охватить более широкий круг потребителей (внутренних и внешних).
- Для разработчиков клиентов классические прототипы функций, такие как
ReturnType DoSomething(Type1 t1, Type2 t2 ...)
являются функцией API, а остальное — это технические детали реализации транспорта: TCP/IP, HTTP, SOAP, ресурсоориентированный, CRUD- основанные на URI, RESTful, XML и JSON и т. д. Прототип функции и часть документа API должны быть достаточно хороши для вызова функции API. - Чем лучше вы разделяете задачи при разработке вашего веб-API, тем больше пользы вы получите от компонентов этого проекта, чтобы быстрее реализовать бизнес-ценности, с меньшим количеством написанного вручную кода, меньшим количеством повторяющихся задач и меньшей вероятностью человеческих ошибок.
Ожидаемые практики программирования
Прототип строго типизированной функции
ReturnType DoSomething(Type1 t1, Type2 t2 ...)
[ HttpGet ]
[ Route ( "getPerson/{id}" ) ]
public Person GetPerson ( long id )
Проверка модели через промежуточное программное обеспечение
Вместо написания явных кодов проверки полезной нагрузки запроса предполагается, что вы используете промежуточное программное обеспечение для проверки. Например:
public void ConfigureServices ( IServiceCollection services )
{
services . AddControllers (
options =>
{
options . Filters . Add ( new ValidateModelAttribute ( ) ) ; // wholesale style to check model binding for all API calls.
Ссылки:
- Проверка модели в веб-API ASP.NET
- Проверка модели на страницах ASP.NET Core MVC и Razor
Проверка модели через ApiControllerAttribute
Например:
[ ApiController ]
[ Route ( "api/[controller]" ) ]
public class HeroesController : ControllerBase
{
Коды состояния HTTP, отличные от 2xx, обрабатываемые промежуточным программным обеспечением, необязательно
Даже если вы явно пишете коды в функции API для обработки исключений и возврата кода состояния HTTP, отличного от 2xx, у вас должна быть надежная сеть для перехвата неперехваченных исключений и возврата кодов состояния HTTP.
Ссылки:
- Промежуточное ПО ASP.NET Core
Предварительные условия
Серверная часть:
- .NET 7/8
- Добавьте CodeGenController.
- В кодах запуска службы добавьте следующее:
services . AddControllers (
options =>
{
#if DEBUG
options . Conventions . Add ( new Fonlow . CodeDom . Web . ApiExplorerVisibilityEnabledConvention ( ) ) ;
#endif
}
)
Примечания:
- Microsoft выпускает крупное обновление .NET (Core) каждый год, начиная с 2016 года, библиотеки в этом репозитории обычно будут обновляться примерно через полгода.
- Общедоступные библиотеки используют .NET на одну версию позже последней версии, а демонстрационное приложение ASP.NET и наборы интеграционных тестов с созданным клиентским API .NET используют текущую версию .NET.
Клиентская часть .NET:
- .NET Framework 4.5.2, или Universal Windows, или Mono.Android, или Xamarin.iOS, или .NET Core 2.0/2.1/3 и .NET 5.
- Клиентские библиотеки ASP.NET Web API 2.2
- Json.NET компании Newtonsoft для приложения Content-Type/json
- Инструменты сборки Microsoft 2015
NewtonSoft.Json или System.Text.Json
Начиная с .NET 7, для сериализации System.Text.Json повторно собирает более 95% NewtonSoft.Json. Есть лишь несколько крайних случаев сложных структур POCO, с которыми System.Text.Json не может справиться.
WebApiClientGen поддерживает как на стороне сервера, так и на стороне клиента C#. Для клиентов C# вы можете использовать «UseSystemTextJson» в настройках генератора кода.
Тем не менее, если ваше приложение включает в себя сложные структуры POCO, использование NewtonSoft.Json является безопасным выбором, начиная с .NET 7.
Клиентская часть TypeScript:
- Компилятор TypeScript
- jQuery
- Угловой 2-17
- Аурелия
- Аксиос
- Получить API
Для получения более подробной информации, пожалуйста, проверьте:
- ВИКИ
- Объяснение настроек
- Создайте клиентский API C# .NET для веб-API ASP.NET.
- Создание клиентского API TypeScript для веб-API ASP.NET
- Веб-API ASP.NET, Angular2, TypeScript и WebApiClientGen
- Создание клиентского API C# для веб-API ASP.NET Core.
- Предполагаемые решения для преднамеренных ограничений строго типизированных генераторов клиентов OpenAPI. В статье OpenApiClientGen используется только в качестве примера, а принципы и решения могут быть применены к кодам, сгенерированным WebApiClientGen для ваших клиентских приложений.
- DateOnly в ASP.NET Core 6
Демонстрационные приложения
Демонстрационные приложения в этом репозитории предназначены в основном для тестирования WebApiClientGen во время разработки. В следующих репозиториях есть и другие демонстрационные приложения, демонстрирующие, как реальные приложения могут использовать WebApiClientGen:
- Примеры WebApiClientGen для .NET Framework, .NET Standard, Xamarin и vue TS.
- Демонстрация .NET Core для ASP.NET Core MVC, веб-API, ASP.NET Core + Angular, MAUI, fetchAPI, vue TS и React TS.
- WebApiClientGen против Swagger
Эти демонстрационные приложения активно поддерживаются и обновляются с учетом новейших платформ. Если вы все еще используете некоторые старые платформы, такие как Angular 4 или 5 или .NET Core 2.0, вы можете перейти к соответствующим тегам репозиториев и оформить заказ.
Тур героев
Tour of Heroes — официальное демонстрационное приложение Angular для обучения.
Чтобы проиллюстрировать опыт использования WebApiClientGen программистами, следующие демонстрационные приложения созданы с похожим архитектурным дизайном для одних и тех же функциональных функций в различных средах разработки или библиотеках, однако они взаимодействуют с реальным серверным компонентом.
- Angular 2+ и типизированные реактивные формы
- Ксамарин
- МАУИ. Перенесено с Xamarin Heroes.
- Аурелия. Включен набор интеграционных тестов.
- Реагировать. Включен набор интеграционных тестов.
- Блазор Автономный
NewtonSoft.Json или System.Text.Json
Однако хотя WebApiClientGen поддерживает оба варианта, с 2024 года основная поддержка перешла на System.Text.Json.
NewtonSoft.Json по-прежнему имеет несколько преимуществ в определенных сценариях и контекстах:
- Если у вас есть много классов POCO, украшенных DataContractAttributes, из-за поддержки устаревших приложений или поддержки сериализации XML и JSON, NewtonSoft.Json предоставляет вам встроенную поддержку, а System.Text.Json обеспечивает некоторую неприятную и косвенную поддержку, начиная с .NET 7.
- Для некоторых типов массивов и динамических данных NewtonSoft.Json все же лучше.