ServiceStack vs ASP.Net API Web
je veux écrire une nouvelle API de style repos et ai regardé ServiceStack et tout à fait comme elle. Cependant, J'ai vu que Microsoft a publié le ASP.Net projet D'API Web dans le cadre de la nouvelle version bêta de MVC 4. Quelqu'un a-t-il regardé le nouveau projet D'API Web? Pouvez-vous donner des avantages/inconvénients de chaque système?
4 réponses
Ils ont très semblables cas d'utilisation, comme le principal responsable de la ServiceStack projet j'ai un bon aperçu de ServiceStack avantages et le de nombreux bienfaits naturels de son message en fonction de la conception .
ServiceStack a été autour depuis 2008 comme un projet OSS-dirigé depuis sa création avec un seul but de promouvoir la conception correcte et la mise en œuvre des services à distance sans friction.
design Simple et élégant
dans sa poursuite pour la simplicité ultime, il est construit autour de un noyau simple et élégant - avec la plupart de ses caractéristiques se liant naturellement à vos modèles , pas vos contrôleurs - qui est ce que MVC, WebApi fait (ainsi que tous les autres Web Service Framework Microsoft a produit).
adopter une conception basée sur le message offre une approche supérieure pour les les services, en ce qu'ils promeuvent des services plus extensibles et moins fragiles, simplifie l'accès et les modèles d'appel, et contiennent de nombreux autres avantages naturels que vous obtenez gratuitement .
en tant que mission centrale, nous combattons la complexité à chaque étape, dans le but de garder une API invisible et non intrusive et d'éviter d'introduire de nouveaux concepts ou constructions artificielles qui ne sont pas déjà familiers aux développeurs de .NET ou de services web aujourd'hui.
Par exemple, l'implémentation de votre service IService<T>
n'est qu'une Classe C standard avec des dépendances auto-câblées. Des enveloppes minces et légères sont utilisées pour fournir une API cohérente et unifiée autour des types IHttpRequest et IHttpResponse . Ils permettent également l'accès à ASP.NET ou les classes de requête et de réponse de HttpListener pour que vous ne soyez jamais limité lors de L'utilisation de ServiceStack.
contrastée avec WCF et WebApi
voici un bref aperçu des différents styles D'API que ServiceStack et WCF promeuvent . WebApi est différent de WCF en ce qu'il encourage la conception D'API REST-ful. En ce qui concerne les exemples entre les 2, c'est le seul exemple connu que j'ai avec le même service écrit à la fois dans ServiceStack et WebApi .
meilleures pratiques services à distance
ServiceStack a mis l'accent sur la simplicité, le rendement et la promotion des pratiques exemplaires en matière de services sur le web et à distance centrées sur L'adoption des modèles de conception des services à distance de Martin Fowlers dans le langage le plus idiomatique possible:
-
the Facade Pattern - ce qui suggère l'utilisation d'interfaces à base de pâte et à grain grossier lorsque vous communiquez au-delà des limites du processus.
-
Le DTO pattern ( MSDN ) - dictant l'utilisation de POCOs spéciaux pour générer le format de fil de vos réponses de services web.
-
Le Passerelle Modèle ( MSDN ) pour encapsuler le client et le serveur de communication entre le Client de la Passerelle / DTO modèles et d'Interface de Service de tiers.
ces motifs assurer une séparation nette des préoccupations et une expérience de développement itératif sans friction.
l'Autonomisation de vos services
un service Web de type ServiceStack à son cœur est centré sur une interface c# IService<T>
qui vous donne la liberté complète de définir votre contrat de service web avec votre propre demande et réponse DTOs en utilisant des POCOs propres - rendant L'API de service Sack pratiquement invisible et non invasive, c'est-à-dire qu'il est trivial pour extraire votre logique C# services et l'exécuter à l'extérieur d'un host ServiceStack.
Ce gist est un bon exemple de ce que vous obtenez avec juste 1 C# .cs de la classe dans ServiceStack :
- pages de métadonnées pour tous les formats enregistrés
- avec des liens vers des exemples de wsdls, XSDs et c# client
- Human friendly vue de rapport HTML
- un seul instantané de page html autonome (c.-à-d. pas de références externes). Inclut la réponse de service Web JSON intégrée-permet l'accès programmatique à des instantanés de données.
- Mini profileur intégré (port de l'excellent MVC Mini profileur )
- Inclut Le Profilage Sql
- JSON / JSONP, XML, JSV, CSV and SOAP end-points
les classes RestServiceBase et ServiceBase sont destinées à héberger votre logique c# custom pour une réutilisation potentielle maximale comme possible, par exemple son DTO-first design permet trivialement une exécution différée et prolongée où votre même C# Service peut également être hébergé et exécuté dans un hôte MQ ce qui est ce qui se passe lorsque vous enregistrez un IMessageService
comme le hôte RedisMQ et appelez votre service via le /asynconeway
endpoint (i.e. client.SendOneWay()
in C# Clients)
vous pouvez aussi facilement déléguer et créer des services composites en utilisant la méthode base.ResolveService<T>()
qui renvoie une instance automatique du service sélectionné comme vu dans le service personnalisé Nortwind exemple:
var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
Retour plaine objets C#
pour la plupart, ServiceStack sérialisera la plupart des objets C# comme prévu - voici une liste des types de retours possibles ( de cette réponse ):
- Tout DTO objet -> sérialisé de Réponse ContentType
- HttpResult, HttpError, CompressedResult (IHttpResult) for Customized HTTP response""
les types suivants ne sont pas convertis et s'écrivent directement au flux de réponse:
- Chaîne
- Flux
- IStreamWriter
- byte[] - avec l'application/octet-stream Type de Contenu.
un exemple du support des en-têtes HTTP personnalisés peut être vu par cet exemple de CORS où vous pouvez configurer les en-têtes HTTP globalement ou sur une base per-service.
la prise en charge HTML
il y a plusieurs options pour retourner HTML dans ServiceStack qui est expliqué en détail ici .
inclut le texte le plus rapide et les sérialiseurs binaires pour .NET
les sérialiseurs résistants et rapides sont d'une importance primordiale dans une API pour assurer des temps de réponse rapides et une API versionable qui ne casse pas les clients existants, c'est pourquoi ServiceStack inclut les les sérialiseurs de texte les plus rapides pour .NET avec une option NuGet pour activer @marcgravell 's les tampons de protocole (.NET plus rapide du binaire sérialiseur).
ServiceStack du texte sérialiseurs sont très résistantes et peuvent résister à l'extrême versioning sans erreur.
sans Friction expérience de développement de bout en Bout
ServiceStack est opiniâtre de la nature permet une rapide, tapé, laconique de l'API de service web de bout en bout avec support intégré pour Sync/Async C#/.NET et Clients Async Silverlight sans aucun code-gen:
Sync Exemple En C#
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
Async Exemple En C#
client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });
comme il retourne JSON pur, il est également consommé avec d'autres Clients HTTP, par exemple exemple de client JS en utilisant jQuery :
$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
alert(todos.length == 1);
});
Hautement testable
tous les clients des Services C#/. NET partagent la même les interfaces qui les rendent très testables et échangeables au point où vous pouvez avoir le test de la même unité servent aussi comme un XML, JSON, JSV, test D'intégration de savon .
Riche de la Validation et de la gestion d'Erreur intégré
dans sa mission de fournir une expérience de développement propre et sans friction, ServiceStack inclut également validation dactylographiée et traitement des erreurs intégré où le lancement d'une Exception C# ou l'utilisation de son intégré Fluent validation fournit aux clients structuré, erreurs dactylographiées facilement accessible sur les clients de service web, E. g:
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)
*/
}
pour simplifier la consommation des erreurs en JavaScript, vous pouvez utiliser la légère SS-validation.js bibliothèque JavaScript pour relier vos erreurs de réponse trivialement à vos champs de formulaires HTML avec une seule ligne de code. Le Socialbootstrapapapi exemple de projet fournit une bonne démonstration de ce.
riche intégration avec ASP.NET et MVC
the ServiceStack MVC PowerPack re-writes and fixes a lot of the ails of ASP.NET et MVC avec des remplacements pour sa session paralysante et la mise en cache XML-grevé ASP.NET fournisseurs avec sa propre mise en œuvre propre et sans dépendance de ICacheClient et ISession APIs.
ServiceStack également doté d'une nouvelle et plus propre de l'authentification et de l'autorisation de fournisseur de modèle avec un certain nombre de différents AuthProviders dans-construit:
- informations d'Identification Pour l'authentification avec nom d'utilisateur/mot de passe par l'affichage à l' /auth/informations d'identification de service
- Basic Auth - Permettant aux utilisateurs de s'authentifier avec l'Authentification de Base
- Twitter OAuth - Permettre aux utilisateurs de S'inscrire et de S'authentifier avec Twitter
- Facebook outh-permettre aux utilisateurs de S'inscrire et de S'authentifier avec Facebook
le module D'authentification est entièrement optionnel et est construit sur les APIs et OrmLite propres ICacheClient / ISession qui permettent à vos Sessions d'être stockées en mémoire, Redis ou Memcached et votre information UserAuth persisté dans les RDBMS d'OrmLite pris en charge de SQLServer, MySql, PostgreSQL, Sqlite ainsi que Redis data-store ou InMemory (utile pour dev/testing).
Grande Documentation
ServiceStack est très bien documenté où la plupart des informations sur le cadre est hébergé sur le wiki GitHub . La Documentation pour d'autres parties du cadre (par exemple Serializers, Redis, OrmLite) peut être trouvée sur servicestack.net/docs/
Le ServiceStack.Exemple Le projet fournit le code source pour toutes les démos live de ServiceStack et les Modèles de démarrage, tandis que le projet SocialBoostsrapApi fournit un excellent point de départ pour développer une épine dorsale.js Single Page App avec ServiceStack et MVC basé sur Twitter Bootstrap modèle.
en plus de ce qui précède un trésor d'informations est contenu dans le groupe de Google qui a augmenté tout à fait considérablement au cours des dernières années.
Court Partout
ServiceStack est un .net 3.5 framework qui fonctionne sur ASP.NET et HttpListener héberge et peut être hébergé sur .NET ou Mono (trivial: www.servicestack.net est alimenté par CentOS/Mono). Cela permet à votre ServiceStack web services d'être hébergé sur l'un ou l'autre:
de Windows .NET 3.5 et 4.0
- IIS 5/6/7 (utilisations IHttpHandler)
- VS.NET WebDevServer
- Console Application ou Windows GUI
- Service Windows
Linux / OSX avec Mono
- Apache + mod_mono
- Nginx + MonoFastCGI
- XSP
- Console Application
développé avec le modèle de développement Open Source
ServiceStack est un fervent partisan du modèle de développement Open Source où il est activement développé dans l'open et a toujours été hébergé sous une licence libérale OSS (nouveau BSD) depuis sa création. À ce jour, il a reçu des contributions de plus de 47 développeurs et il se trouve actuellement à la troisième plus regardé c# projet sur GitHub .
désavantages
je pense que le plus grand inconvénient est le même pour la plupart des autres projets OSS .NET où il n'a pas été développé (ou même répertorié comme une option disponible) par Microsoft. Cela signifie qu'il est rarement le premier choix lors de l'évaluation d'un cadre. La plupart des adoptants n'évaluent ServiceStack qu'en dernier recours, lorsqu'ils sont soit frustrés par la friction et la fragilité imposées de la WCF, soit frustrés par la performance de la pile Microsoft préférée.
Feedback et des Ressources de la Communauté
ServiceStack a été très bien reçu avec des commentaires positifs fournis par la plupart des gens qui l'ont évalué comme visible par le sentiment positif dans le groupe de mailing . Depuis cette année, le @ServiceStack compte twitter a été suivi mentions et commentaires dans ses favoris .
la ressources de la communauté la page wiki est un bon endroit pour en savoir plus sur ServiceStack dans la nature avec des liens vers des billets de Blog, des diffusions de gousses, des présentations, des coups de poing et plus.
Il y a une nouvelle principale différence qui doit être pris en compte pour - ServiceStack n'est plus libre de l'utiliser comme de la v4. Puisqu'il y a une réponse assez définitive sur les pros SS je voulais jeter un couple pour L'API Web
API Web
"151910920 Pro :
- Libre de les utiliser dans votre projet (si vous avez un VS licence qui permet l'utilisation commerciale)
- niveau extraordinairement élevé de support gratuit disponible à partir de Microsoft et sur le web, y compris ici StackOverflow.com.
- s'intègre rapidement avec D'autres piles de technologie Microsoft comme ASP.NET MVC qui est extrêmement populaire dans les magasins Microsoft
- prise en charge intégrée de l'authentification et de l'autorisation RESTful dans votre pile Microsoft
Con :
- Ne prend pas en charge le SAVON
Prestations Accessoires
(n'hésitez pas à laisser des commentaires ci-dessous en ajoutant pourquoi API Web a des avantages ou des avantages / inconvénients que je peux ajouter)
Je ne peux pas vraiment dire grand chose sur ServiceStack, mais L'API Web a beaucoup de grandes fonctionnalités et est actuellement à la version 2.
certaines des choses que vous pouvez faire avec L'API Web:
- SELF host dans une application OWIN (i.e. fonctionne n'importe où).
- Support complet pour
async
etawait
. - Bon Modèles par défaut et des tonnes de l'open source des exemples.
- utilisé Grand Json.Net JSON serializer.
- Reste-ish par défaut (que vous aurez à faire hypermédia vous-même).
- et plus...
en tant que client de ServiceStack voici le pro de ServiceStack le plus important pour moi.
https://github.com/ServiceStack/Issues/issues/606
So. Bug trouvé, bug identifié, bug corrigé. Même jour. Un soutien extraordinaire!