7
votes

API de service multi-locataires pour les entités commerciales et la logique d'entreprise

Nous disposons d'une application où nous souhaitons exposer un grand nombre d'entités de base de données et de la logique d'entreprise. Chaque entité nécessitera la possibilité de lire, d'ajouter et de mettre à jour. À ce stade, nous ne nous attendons pas à autoriser la suppression.

Le logiciel que nous construisons est utilisé dans un large éventail d'entreprises, dont certains de nos clients utilisent également cette approche pour avoir des bases de données distinctes pour des raisons financières.

Nous souhaitons pouvoir minimiser le nombre de points finaux à maintenir. À l'heure actuelle, seules 3 tables sont exposées sous forme d'interfaces WCF chacune avec 6 méthodes attachées. Ceci est gérable mais si l'opération dispose de 50 bases de données qui deviennent soudainement 150 points de terminaison. Pire si nous avons 50 tables exposées qui deviennent 2500 points de terminaison.

Quelqu'un a-t-il une suggestion sur la façon dont nous pourrions concevoir un système sur lequel nous avons toujours un modèle d'entité simple de Job.Add (var1) ou iList Jobs = job.getsel ("SQL Type Lire").

sans tous ces points d'extrémité

wcf

1 commentaires

Veuillez investir dans un vérificateur orthographique


5 Réponses :


0
votes

On dirait que vous pouviez passer l'identité à chaque requête et le prendre en compte. Cela signifierait que chaque enregistrement de votre table "travail" devrait avoir une référence au propriétaire "Identity", mais cela ne devrait pas être une grande quantité d'un problème.

Assurez-vous que chaque requête valide l'identité et que vous devriez être correct.


1 commentaires

Un moyen standard de le faire est d'une carte d'identité de session, généralement transmise dans l'en-tête HTTP Cookie.



0
votes

Si je comprends votre question correctement, je pense que vous avez besoin de points d'extrémité uniques, mais vous pouvez avoir un comportement de service unique que votre référence de points de fin.

Créer un point d'extrémité par défaut: P>

<service behaviorConfiguration="MyService.DefaultBehavior"
           name="MyService.Customer">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding"
              contract="MyService.ICustomer">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>


0 commentaires

0
votes

Fourniture multi-location, sans points d'extrémité bazillion

Un moyen est d'accéder à un service de WCF de style de repos pouvant utiliser le nom d'utilisateur / mot de passe pour distinguer quel client vous travaillez et peut donc être capable de sélectionner en interne à laquelle DB doit se connecter. WCF vous donne le UritemPate qui vous permet de cartographier la pièce de l'URL sur les paramètres de vos méthodes Web:


2 commentaires

Mettre le "verbe" dans l'URL n'est pas considéré comme reposant. L'un des préinples de repos de base est d'utiliser uniquement obtenir, publier, mettre et supprimer comme vos verbes. Dans ce cas, obtenez remplacer SELECT, POST remplacerait l'insertion et placerait remplacer la mise à jour.


Ah, bonne prise. Je n'ai pas réalisé que je l'ai fait dans ma réponse. Donc, l'URL peut toutes être la même, à l'aide d'un verbe HTTP différent pour l'insertion d'opérations de base, la mise à jour, la suppression et la sélection.



0
votes

avec Apache Vous pouvez utiliser un ensemble assez simple de règles de réécriture d'URL pour mapper un ensemble arbitraire de tables de table DB et leurs points d'extrémité correspondants à un point final unique avec un paramètre.

Par exemple, pour mapper $ root / Nom / Nom de table / colonne_name à $ root / index.php? tn = name_name & cn = nom_name, vous pouvez ajouter une règle comme ceci à $ root / .htaccess: xxx

alors que vous n'avez besoin que de maintenir $ Root / index.php (bien sûr peut générer les codes d'état HTTP appropriés pour les tables et / ou les colonnes inexistantes).


0 commentaires

1
votes

Services de données WCF vous permet d'exposer vos données dans un Manière reposante utilisant le protocole de données ouverte (ODATA). Ceci a été officiellement appelé Services de données ADO.NET et avant cet Astoria. Toute collection iquérissable peut être exposée. La voie indiquée dans la plupart des exemples est d'utiliser le cadre d'entité, mais il existe des exemples montrant l'utilisation avec NHibernate et d'autres technologies d'accès aux données. Odata est une auto décrivant l'API basée sur Atom-pub avec des extensions personnalisées. Avec une quantité minimale de code, vous pouvez exposer votre base de données dans un format bien défini. C'est la partie facile.

Pour mettre en œuvre la multi-tenman de la mise en œuvre, vous pouvez créer des intercepteurs de requêtes dans l'application de services de données WCF pour mettre en œuvre cette logique. Le nombre d'intercepteurs et la complexité du code que vous écrivez dépendront de votre modèle de sécurité et de vos besoins. En regardant quelque chose comme des modèles T4 ou des codesmith pour générer les méthodes d'interceptage en fonction de votre schéma de base de données peut être un moyen d'empêcher beaucoup de codage manuel répétitif.

Le lien que j'ai fourni a beaucoup d'informations et de didacticiels sur les services de données WCF et permettrait de commencer à voir si cela répondrait à vos besoins. J'ai consulté les services de données WCF pour un problème similaire (multi-location) et j'adorerais savoir comment vous implémentez expirez votre solution.


0 commentaires