강력한 형식의 클라이언트 웹 API 생성기는 Swagger/OpenAPI 또는 Swashbuckle을 사용하지 않고 ASP.NET(Core) 웹 API에서 직접 C# 및 TypeScript로 클라이언트 API 코드를 생성하므로 ASP.NET 웹 API의 Code First 접근 방식의 데이터 유형에 대한 지원을 극대화합니다. .
제품
이 프로젝트는 다음 제품을 제공합니다.
- .NET 및 Xamarin.Forms를 지원하는 C#의 강력한 형식 클라이언트 API용 코드 생성기입니다.
- jQuery, Angular 2+, Aurelia, Axios 및 Fetch API용 TypeScript의 강력한 형식의 클라이언트 API용 코드 생성기입니다.
- TypeScript CodeDOM은 TypeScript 코드 생성기 개발을 위한 TypeScript용 .NET CodeDOM 구성 요소입니다.
- POCO 클래스에서 TypeScript 인터페이스를 생성하는 명령줄 프로그램인 POCO2TS.exe.
- Fonlow.Poco2Ts는 POCO 클래스에서 TypeScript 인터페이스를 생성하는 구성 요소입니다.
- jQuery, AXIOS, Fetch API, Aurelia, Angular 2+ 및 Angular Typed Reactive Forms용 플러그인입니다.
- 서로 다른 시간대에 있는 클라이언트와 서버 간의 날짜 전용 시나리오를 처리하기 위한 JSON 변환기가 포함된 Fonlow.DataOnlyExtensions. .NET Framework 패키지도 사용할 수 있습니다.
사용 사례 및 다운로드
제품은 주로 NuGet을 통해 출시됩니다.
- C# 클라이언트 API를 생성한 다음 Fonlow.WebApiClientGenCore 패키지를 사용합니다.
- TypeScript 클라이언트 API를 생성한 다음 Fonlow.WebApiClientGenCore 플러그인 중 하나를 사용합니다.
- jQuery 및 HttpClient 도우미 라이브러리
- 각도 6+
- Angular 6+ 및 설명이 포함된 반응형 양식을 위한 FormGroup 생성
- 액시오스
- 아우렐리아
- 가져오기 API
- CodeDOM 접근 방식을 통해 TypeScript 코드 생성기를 개발한 다음 Fonlow.TypeScriptCodeDOMCore 패키지를 사용합니다.
- POCO 등을 위한 CodeDOM 접근 방식을 통해 TypeScript 코드 생성기를 개발한 다음 Fonlow.Poco2TSCore 패키지를 사용하거나 PowerShell 7 스크립트를 사용하세요.
- TypeScript 유형 인터페이스를 생성한 다음 콘솔 앱인 Poco2TSCore.exe를 사용하세요.
- .NET 어셈블리의 XML 문서를 읽는 기능을 개발한 다음 Fonlow.DocCommentCore 패키지를 사용합니다.
힌트:
- WebApiClientGen의 핵심 구성 요소를 기반으로 하는 OpenApiClientGen은 Swagger/Open API 사양의 정의 파일에 따라 C# 및 TypeScript로 클라이언트 API 코드를 생성하기 위한 파생 제품입니다.
- WebApiClientGen은 Swagger/OpenAPI 정의를 활용하지 않지만 디버그 빌드의 실행 중인 웹 API의 런타임 유형 정보에서 코드를 생성하여 .NET 유형 및 웹 API에 대한 OpenAPI의 고유한 제한을 제거하여 ASP에 더 나은 개발자 경험을 제공합니다. NET(핵심) 웹 API 개발자입니다.
비고:
- 개발은 2015년에 .NET Framework를 지원하기 시작한 다음 .NET Core 2를 지원하기 시작했습니다. 그리고 "LastCore31" 태그는 .NET Framework 4.6.2 및 .NET Core 3.1을 지원하는 마지막 스냅샷을 표시하는 것입니다.
- 2021년 2월 10일부터 개발에서는 .NET 5 이상만 지원됩니다.
- .NET Framework에 대한 Wiki 콘텐츠는 가까운 미래에도 유지될 예정입니다.
주요 특징
- 생성된 클라이언트 API 코드는 Web API 컨트롤러 메서드, .NET 기본 유형 및 POCO 클래스에서 직접 매핑됩니다. 이는 WCF의 svcutil.exe가 제공하는 것과 유사합니다.
- 컨트롤러 메서드 및 POCO 클래스의 문서 주석이 복사됩니다.
- 일부 유효성 검사 속성은 TypeScript 코드에 대한 문서 주석을 생성하는 데 사용됩니다.
개발자 경험의 주요 이점
- WebApiClientGen은 RAD 또는 Agile 소프트웨어 개발 중에 Web API와 클라이언트 API 간의 설정, 유지 관리 및 동기화를 위한 단계/오버헤드가 거의 없이 ASP.NET Core Web API와 원활하게 통합됩니다.
- 십진수를 포함한 모든 .NET 기본 유형을 지원합니다.
- DataTime, DataTimeOffset, DateOnly, Array, Tuple, Dynamic Object, Dictionary 및 KeyValuePair 지원
- 강력한 형식으로 생성된 코드에는 디자인 타임 유형 검사와 컴파일 타임 유형 검사가 적용됩니다.
- 높은 수준의 추상화를 제공하여 애플리케이션 개발자가 RESTful 방식의 반복적인 기술 세부 사항과 AJAX 호출의 기존 코드로부터 보호합니다.
- 문서 주석을 포함한 풍부한 메타 정보는 IDE intellisense를 더욱 유용하게 만들어 애플리케이션 개발자가 별도의 API 문서를 읽을 필요가 줄어듭니다.
- .NET 유효성 검사 특성을 기반으로 생성된 문서 주석입니다.
- TypeScript 코드의 숫자 유형, DateOnly 및 GUID를 기반으로 생성된 문서 주석입니다.
- 생성된 TypeScript 코드는 TypeScript 엄격 모드를 따르고, 생성된 Angular 2+ 코드는 Angular 엄격 모드를 따릅니다.
예
- POCO 수업
- 웹 API
- 생성된 클라이언트 API C# 코드
- C#에서 생성된 라이브러리를 사용하는 클라이언트 코드
- jQuery, Angular 2, Aurelia 및 Axios용 TypeScript에서 생성된 클라이언트 데이터 모델 및 API
- TypeScript에서 생성된 라이브러리를 사용하는 클라이언트 코드
- GitHub.IO에서 호스팅되는 Angular Heroes가 실제 백엔드와 대화하는 온라인 데모
비고:
- 생성된 TypeScript 코드에서 컴파일된 JavaScript 코드는 JS 애플리케이션에서 사용할 수 있지만 분명히 사용할 수 있는 유형 정보는 없지만 애플리케이션 프로그래머는 여전히 AJAX 세부 정보의 Intellisense 및 추상화를 즐길 수 있습니다.
- React 및 Vue.js 애플리케이션은 일반적으로 HTTP 요청에 Axios 또는 Fetch API를 사용합니다. 2019년 6월부터 babel은 이 pull request 덕분에 네임스페이스를 지원하므로 생성된 TypeScript 코드로 React TSX 프로그래밍을 할 수 있을 것입니다.
개념
- 웹 API 공급업체/개발자는 RESTful 웹 API가 더 많은 소비자(내부 및 외부)에게 효율적으로 도달할 수 있도록 하기 위해 Google 및 Amazon 등이 하는 것처럼 클라이언트 프로그램 개발자에게 클라이언트 API 라이브러리를 제공해야 합니다.
- 클라이언트 개발자에게는
ReturnType DoSomething(Type1 t1, Type2 t2 ...)
과 같은 고전적인 함수 프로토타입이 API 함수이고 나머지는 TCP/IP, HTTP, SOAP, 리소스 지향, CRUD 등 전송의 기술 구현 세부 사항입니다. 기반 URI, RESTful, XML 및 JSON 등. 함수 프로토타입과 API 문서 조각은 API 함수를 호출하기에 충분해야 합니다. - Web 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.
참고자료:
- ASP.NET 웹 API의 모델 유효성 검사
- ASP.NET Core MVC 및 Razor Pages의 모델 유효성 검사
ApiControllerAttribute를 통한 모델 검증
예를 들어:
[ ApiController ]
[ Route ( "api/[controller]" ) ]
public class HeroesController : ControllerBase
{
미들웨어가 처리하는 2xx가 아닌 HTTP 상태 코드, 선택 사항
예외를 처리하고 2xx가 아닌 HTTP 상태 코드를 반환하기 위해 API 함수에 코드를 명시적으로 작성하더라도 포착되지 않은 예외를 포착하고 HTTP 상태 코드를 반환할 수 있는 안전한 네트워크가 있어야 합니다.
참고자료:
전제 조건
서버측:
- .NET 7/8
- CodeGenController를 추가합니다.
- 서비스 시작 코드에 다음을 추가합니다.
services . AddControllers (
options =>
{
#if DEBUG
options . Conventions . Add ( new Fonlow . CodeDom . Web . ApiExplorerVisibilityEnabledConvention ( ) ) ;
#endif
}
)
비고:
- Microsoft는 2016년부터 매년 .NET(Core)의 주요 업그레이드를 출시해 왔으며 이 저장소의 라이브러리는 일반적으로 약 반년 후에 최신 버전을 따릅니다.
- 공용 라이브러리는 최신 버전보다 한 버전 뒤처진 .NET을 사용하고, 생성된 .NET 클라이언트 API를 사용하는 ASP.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 웹 API 2.2 클라이언트 라이브러리
- Content-Type 애플리케이션/json을 위한 Newtonsoft의 Json.NET
- 마이크로소프트 빌드 도구 2015
NewtonSoft.Json 또는 System.Text.Json
.NET 7부터 직렬화를 위해 System.Text.Json은 NewtonSoft.Json의 95% 이상을 재조립합니다. System.Text.Json이 처리할 수 없는 복잡한 POCO 구조의 경우는 극히 일부에 불과합니다.
WebApiClientGen은 서버 측과 C# 클라이언트 측을 모두 지원합니다. C# 클라이언트의 경우 codegen 설정에서 "UseSystemTextJson"을 사용할 수 있습니다.
그럼에도 불구하고 애플리케이션에 복잡한 POCO 구조가 포함된 경우 .NET 7부터는 NewtonSoft.Json을 사용하는 것이 안전합니다.
TypeScript 클라이언트 측:
- 타입스크립트 컴파일러
- jQuery
- 각도 2-17
- 아우렐리아
- 액시오스
- 가져오기 API
자세한 내용은 다음을 확인하세요.
- 위키
- 설정 설명
- ASP.NET 웹 API용 C# .NET 클라이언트 API 생성
- ASP.NET 웹 API용 TypeScript 클라이언트 API 생성
- ASP.NET 웹 API, Angular2, TypeScript 및 WebApiClientGen
- ASP.NET Core 웹 API용 C# 클라이언트 API 생성
- 강력한 형식의 OpenAPI 클라이언트 생성기의 의도적인 제한에 대한 솔루션입니다. 이 기사에서는 단지 OpenApiClientGen을 예로 사용하고 있으며 클라이언트 앱용으로 WebApiClientGen이 생성한 코드에 원칙과 솔루션을 적용할 수 있습니다.
- ASP.NET Core 6의 DateOnly
데모 애플리케이션
이 저장소의 데모 애플리케이션은 주로 개발 중에 WebApiClientGen을 테스트하기 위한 것입니다. 다음 리포지토리에는 실제 애플리케이션이 WebApiClientGen을 활용하는 방법을 보여주는 다른 데모 애플리케이션이 있습니다.
- .NET Framework, .NET Standard, Xamarin 및 vue TS용 WebApiClientGen 예제입니다.
- ASP.NET Core MVC, Web API, ASP.NET Core + Angular, MAUI, fetchAPI, vue TS 및 React TS용 .NET Core 데모.
- 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은 여전히 특정 시나리오 및 상황에 따라 몇 가지 장점을 갖고 있습니다.
- 레거시 앱을 지원하거나 XML 및 JSON 직렬화를 모두 지원하기 때문에 DataContractAttributes로 장식된 POCO 클래스가 많은 경우 NewtonSoft.Json은 고유한 지원을 제공하는 반면 System.Text.Json은 .NET 7부터 일부 번거롭고 간접적인 지원을 제공합니다.
- 일부 배열 유형 및 동적의 경우 NewtonSoft.Json이 여전히 더 좋습니다.