답변:
ServiceStack 프로젝트 의 주요 관리자로서 ServiceStack의 장점과 메시지 기반 디자인 의 많은 자연적인 이점에 대한 통찰력을 가지고 있기 때문에 사용 사례가 매우 유사합니다 .
ServiceStack은 2008 년부터 마찰없는 원격 서비스의 올바른 설계 및 구현을 장려하는 단일 목표로 시작부터 OSS 실행 프로젝트로 활동 해 왔습니다.
최고의 단순성을 추구하기 위해 MVC, WebApi (Microsoft가 생산 한 다른 모든 웹 서비스 프레임 워크)와 같은 컨트롤러가 아닌 모델에 자연스럽게 바인딩되는 대부분의 기능을 갖춘 단순하고 우아한 코어를 기반으로 구축되었습니다 . ).
메시지 기반 디자인을 채택하면보다 확장 가능하고 덜 취성적인 서비스를 홍보하고 액세스 및 통화 패턴을 단순화 하며 무료로 얻을 수있는 다른 많은 자연적인 이점을 포함 한다는 점에서 원격 서비스에 대한 우수한 접근 방식을 제공합니다 .
핵심 임무로서, 우리는 보이지 않는 비 침입 API를 유지하고 .NET 또는 웹 서비스 개발자에게 아직 익숙하지 않은 새로운 개념이나 인공 구조물을 도입하지 않기 위해 모든 단계에서 복잡성을 극복합니다.
예를 들어 IService<T>
서비스 구현은 자동 유선 종속성이있는 표준 C # 클래스 일뿐입니다. 얇고 가벼운 래퍼는 코어 런타임 IHttpRequest 및 IHttpResponse 유형에 대해 일관되고 통합 된 API를 제공하는 데 사용됩니다 . 또한 기본 ASP.NET 또는 HttpListener의 요청 및 응답 클래스에 대한 액세스를 허용하므로 ServiceStack을 사용할 때 제한을받지 않습니다.
다음은 ServiceStack 및 WCF가 홍보 하는 대조되는 API 스타일에 대한 간략한 개요입니다 . WebApi는 REST-ful API 디자인을 장려한다는 점에서 WCF와 다릅니다. 2 사이의 예와 같이 이것은 ServiceStack과 WebApi 모두로 작성된 동일한 서비스로 가지고있는 유일한 알려진 예 입니다.
ServiceStack은 단순성, 성능 및 Martin Fowlers 원격 서비스 디자인 패턴을 가능한 관용적 C #으로 수용하는 데 중점을 둔 웹 / 원격 서비스 모범 사례를 홍보하는 데 중점을두고 있습니다.
외관 패턴 은 프로세스 경계를 통해 통신 할 때 어느 batchful, 대단위 인터페이스의 사용을 제안한다 -.
DTO 패턴 ( MSDN ) - 특수 목적 포항 강판의 사용을 지시하여 웹 서비스 응답의 와이어 형식을 생성합니다.
클라이언트 게이트웨이 / DTO 모델과 서비스 인터페이스 계층 간의 클라이언트 및 서버 통신을 캡슐화 하는 게이트웨이 패턴 ( MSDN )
이러한 패턴은 관심사를 깨끗하게 분리하고 마찰이없는 반복적 개발 경험을 보장합니다.
ServiceStack 웹 서비스의 핵심은 종속성이없는 자동 유선 순수 C # IService<T>
인터페이스를 중심으로하며 깨끗한 POCO를 사용하여 고유 한 요청 및 응답 DTO로 웹 서비스 계약을 자유롭게 정의 할 수 있습니다. ServiceStack의 API는 실제로는 보이지 않습니다. -침습적입니다. 즉, C # 서비스 로직을 추출하여 ServiceStack 호스트 외부에서 실행하는 것이 쉽지 않습니다.
이 요지는 ServiceStack에서 단 하나의 C # .cs 클래스로 얻는 것의 좋은 예입니다 .
RestServiceBase 및 ServiceBase 클래스는 가능한 최대 재사용을 위해 사용자 정의 C # 로직을 호스팅하기위한 것입니다. 예를 들어 DTO 최초 디자인은 동일한 C # 서비스를 MQ 호스트에서 호스팅 및 실행할 수있는 경우 지연되고 프록시 된 실행을 허용합니다. 이는 RedisMQIMessageService
와 같은 호스트 를 등록 하고 /asynconeway
엔드 포인트 를 통해 서비스를 호출 할 때 발생 합니다 (예 : client.SendOneWay()
C # 클라이언트).
Nortwind CustomerDetails 서비스 예 base.ResolveService<T>()
에서 볼 수 있듯이 선택한 서비스의 자동 유선 인스턴스를 반환하는 방법을 사용하여 복합 서비스를 쉽게 위임하고 만들 수 있습니다 .
var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
대부분의 경우 ServiceStack은 대부분의 C # 객체를 예상대로 직렬화합니다. 다음은 가능한 반환 유형 목록입니다 ( 이 답변에서 제공 ).
다음 유형은 변환되지 않으며 응답 스트림에 직접 기록됩니다.
사용자 정의 HTTP 헤더 지원의 예는 이 CORS 예 에서 볼 수 있습니다. 이 CORS 예 에서는 전체적으로 또는 서비스별로 HTTP 헤더를 구성 할 수 있습니다.
ServiceStack에서 HTML을 반환하는 여러 가지 옵션이 여기에 자세히 설명되어 있습니다 .
탄력적이고 빠른 시리얼 라이저는 빠른 응답 시간과 기존 클라이언트를 방해 하지 않는 버전 관리 가능한 API를 보장하기 위해 API에서 가장 중요한 요소입니다. 이것이 ServiceStack에 @marcgravell 의 프로토콜 을 활성화하는 NuGet 옵션과 함께 .NET 용 텍스트 텍스트 시리얼 라이저 가 가장 빠른 이유입니다 버퍼 (.NET에서 가장 빠른 이진 시리얼 라이저).
ServiceStack의 텍스트 시리얼 라이저는 매우 탄력적이며 오류없이 극단적 인 버전 관리 를 견딜 수 있습니다 .
ServiceStack의 의견 수렴은 코드 생성없이 Sync / Async C # /. NET 및 Async Silverlight 클라이언트 를 기본적으로 지원하여 빠르고 타이핑 된 간결한 웹 서비스 API 엔드 투 엔드를 허용합니다.
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });
순수한 JSON을 반환하기 때문에 다른 HTTP 클라이언트와 함께 사소하게 소비됩니다 (예 : jQuery를 사용하는 JS 클라이언트 예제) .
$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
alert(todos.length == 1);
});
모든 C # /. NET ServiceClient는 동일한 인터페이스를 공유하므로 동일한 단위 테스트 를 XML, JSON, JSV, SOAP 통합 테스트로 사용할 수있는 지점으로 테스트 및 교환이 가능 합니다.
Fristton-free and clean dev experience를 제공하기위한 ServiceStack에는 C # Exception을 발생 시키거나 내장 된 Fluent 유효성 검사를 사용하여 웹 서비스 클라이언트에서 쉽게 액세스 할 수있는 구조화 된 형식화 된 오류를 제공 하는 형식화 된 유효성 검사 및 오류 처리 기능이 내장되어 있습니다. 예 :
try {
var client = new JsonServiceClient(BaseUri);
var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
/*
webEx.StatusCode = 400
webEx.ErrorCode = ArgumentNullException
webEx.Message = Value cannot be null. Parameter name: Name
webEx.StackTrace = (your Server Exception StackTrace - if DebugMode is enabled)
webEx.ResponseDto = (your populated Response DTO)
webEx.ResponseStatus = (your populated Response Status DTO)
webEx.GetFieldErrors() = (individual errors for each field if any)
*/
}
JavaScript에서 오류를 소비하는 것이 쉽지 않게하기 위해 경량의 ss-validation.js JavaScript 라이브러리를 사용하여 단일 코드 행으로 응답 오류를 HTML 양식 필드에 간단하게 바인딩 할 수 있습니다. SocialBootstrapApi 예제 프로젝트는 이것의 좋은 데모를 제공합니다.
ServiceStack MVC 파워팩의 다시 쓰기 및 수정의에 대한 교체와 ASP.NET과 MVC의 괴롭히는 많은 타격 세션 ICacheClient 및 ISession API를 자신의 깨끗하고 의존성이없는 구현 및 캐싱 XML-지장을 ASP.NET 제공.
ServiceStack에는 또한 여러 가지 다른 AuthProvider가 내장 되어있는 새롭고보다 깨끗한 인증 및 자동 공급자 공급자 모델이 포함 되어 있습니다.
인증 모듈은 전적으로 옵션이며 클린 ICacheClient / ISession API 및 OrmLite에 내장되어있어 세션을 메모리, Redis 또는 Memcached에 저장하고 UserAuth 정보를 OrmLite가 지원하는 RDBMS의 SQLServer, MySql, PostgreSQL, Sqlite 뿐만 아니라 Redis 데이터 저장소 또는 InMemory (개발 / 테스트에 유용).
ServiceStack은 프레임 워크에 대한 대부분의 정보가 GitHub 위키 에서 호스팅되는 곳에 매우 잘 문서화되어 있습니다 . 프레임 워크의 다른 부분 (예 : Serializer, Redis, OrmLite)에 대한 설명서는 servicestack.net/docs/ 에서 찾을 수 있습니다.
ServiceStack.Examples 동안 프로젝트 ServiceStack의 라이브 데모 및 스타터 템플릿의 모든 소스 코드를 제공 SocialBoostsrapApi 프로젝트 Twitters 부트 스트랩 템플릿을 기반으로 ServiceStack와 MVC와 Backbone.js 단일 페이지 응용 프로그램을 개발하는 좋은 출발점을 제공합니다.
이외에도 최근 몇 년 동안 상당히 많은 정보가 Google 그룹에 포함되어 있습니다.
(: 퀴즈 ServiceStack는 ASP.NET에서 실행하고 http-listener에 호스트와는 .NET 또는 모노 중 하나에서 호스팅 할 수있는 .NET 3.5 프레임 워크입니다 www.servicestack.net를 CentOS는 / 모노에 의해 제공됩니다). 이를 통해 ServiceStack 웹 서비스를 다음 중 하나에서 호스팅 할 수 있습니다.
ServiceStack은 오픈 소스 개발 모델을 강력하게 믿고 있으며 오픈 소스에서 적극적으로 개발되고 처음부터 자유 OSS 라이센스 (New BSD) 로 호스팅되었습니다 . 현재 현재 47 명 이상의 개발자 로부터 공헌을 받았으며 현재 GitHub 에서 세 번째로 가장 많이 본 C # 프로젝트에 있습니다 .
Microsoft가 개발하지 않았거나 사용 가능한 옵션으로 나열되지 않은 대부분의 다른 OSS .NET 프로젝트의 경우 가장 큰 단점이 동일하다고 생각합니다. 이것은 프레임 워크를 평가할 때 가장 먼저 선택되는 것이 거의 없음을 의미합니다. 대부분의 채택 자들은 ServiceStack을 최후의 수단으로 만 평가할 것입니다. WCF의 마찰과 취성 또는 선호하는 Microsoft Stack의 성능에 실망한 경우입니다.
ServiceStack은 메일 그룹의 긍정적 인 정서에서 볼 수있는 것으로 평가 한 대부분의 사람들에 의해 긍정적 인 피드백을 받아 매우 호평을 받았습니다 . 올해 들어 @ServiceStack 트위터 계정은 즐겨 찾기에서 언급과 의견을 추적 하고 있습니다.
커뮤니티 리소스 위키 페이지 게시물, 포드 캐스트, 프리젠 테이션, 기 스트 등을 블로그에 링크 야생에서 더 ServiceStack에 대해 알 수있는 좋은 장소입니다.
고려해야 할 새로운 주요 차이점이 있습니다. ServiceStack은 v4부터 더 이상 사용할 수 없습니다. SS 전문가에 대한 명확한 결정이 있기 때문에 웹 API를 위해 몇 가지를 버리고 싶었습니다.
프로 :
단점 :
부가 혜택
(웹 API에 이점이 있거나 추가 할 수있는 장단점이있는 이유를 추가하여 아래에 의견을 남겨주십시오)
ServiceStack에 대해 많이 말할 수는 없지만 웹 API에는 많은 훌륭한 기능이 있으며 현재 버전 2입니다.
웹 API로 할 수있는 것 :
async
및에 대한 완벽한 지원 await
.ServiceStack의 고객으로서 ServiceStack의 전문가는 저에게 가장 중요합니다.
https://github.com/ServiceStack/Issues/issues/606
그래서. 버그 발견, 버그 식별, 버그 수정. 같은 날. 특별한 지원!
SS를 사용한 지 1 년이되었으며 모두 훌륭합니다. ORMLite는 순수한 마법입니다. 모바일 앱에 통합하기 위해 엄청난 MySQL DB를 다시 매핑 할 수있었습니다. 데이터베이스를 변경하지 않으면 다른 앱과 함께 PHP 백엔드와 함께 사용됩니다 ...
Mythz는 지원과 설명에 관한 예입니다. 앱 디자인 및 유지 관리의 단순성에 대한 지식을 업그레이드했습니다. 그것을 시도하고 이해합니다.
또한 SS를 WebAPI와 비교하지 마십시오. 충분하지 않습니다. SS는 도구 상자에 훨씬 더 많은 것을 제공합니다. ServiceStack.Text도 훌륭한 Automapper입니다.