Le meilleur moyen d'avoir une API Web avant la demande aux autres
J'ai un peu de web services s'exécutant sur des serveurs différents, et je veux avoir un web service "en avant" de la reste à décider quel service web (serveur), la demande doit être transmise à la base de valeurs d'en-tête.
L'idée est qu'un client envoie une requête, dire:
http://api.mysite.com/cars
L'API à l'mysite.com inspecter la demande, extraire des informations à partir de la clé API (qui est fournie dans les en-têtes) et le rediriger vers le serveur approprié, par exemple
http://server4.mysite.com/api/cars
Est-ce que le travail? Je suis préoccupé par la façon dont je vais retourner la réponse (w/data) à partir de "server4" pour le client. La réaction ne peut être renvoyé au premier serveur ou le client à atteindre cette réponse?
Je veux que les clients n'ont à parler de api.mysite.com indépendamment de quel serveur ils sont vraiment contactant. J'étais juste inquiète de savoir si cela serait possible. J'ai pensé que peut-être le client serait automatiquement(?) recevoir une réponse du premier serveur et ainsi manquer le "second" de la réponse. Peut-être que c'est juste un idiot pensé... je voulais juste savoir si je serai en mesure de retourner la réponse à partir de la 2ème serveur directement au client.
Vous pouvez les rediriger (ils vont communiquer directement avec le serveur). En supposant que vous site est sessionless, alors c'est bien à cause de l'équilibrage de la charge (et parce qu'il n'a pas d'impact sur les ressources de votre serveur). Au lieu de cela, si vous voulez "filtre" de leurs demandes (par exemple en raison de l'authentification est effectuée sur votre serveur), alors vous devez d'abord télécharger la réponse de la 2ème serveur, puis l'envoyer au client. Avantage: ils ne voient que vous, vous pouvez avoir des sessions (sans effort), mais les inconvénients: vous aurez besoin de beaucoup plus de ressources de votre serveur (et l'équilibrage de charge sera plus difficile).
J'ai exactement la même configuration, les appels des clients de l'api externe d'extrémité et puis, sur la base de l'entrée, je les rediriger vers l'api interne d'extrémité (sur différents serveurs internes) et tout fonctionne, et aussi loin que la réponse est concerné si vous souhaitez masser votre réponse avant de l'envoyer, vous pouvez le faire sinon, vous pouvez simplement envoyer la réponse en est de l'interne à l'appel de l'API. Donc, conclusion , ce que vous dites est valable scénario et cela devrait fonctionner.
OriginalL'auteur msk | 2015-06-24
Vous devez vous connecter pour publier un commentaire.
Tout ce que vous devez faire est de construire une API Web DelegatingHandler comme ceci:
Cette solution ne fonctionne pas avec les OBTENIR et de les SUPPRIMER, parce que la mise en œuvre de SendAsync lui-même essayez de lire la demande ruisseau qui mène à l'erreur "Impossible d'envoyer un contenu-corps avec ce verbe-type." (voir ce stackoverflow.com/questions/3981564/... ).Pour le faire, au lieu de l'appel du client.SendAsync, j'ai appeler le client.GetAsync ou d'un client.PostAsync ou d'un client.PutAsync ou d'un client.DeleteAsync dépendent de la demande de la Méthode Http. En conséquence, j'ai copier manuellement tous les en-Tête de l'objet de la requête à l'objet HttpClient.
Ne pas remplacer les autres méthodes? SendAsync est juste pour l'envoi de données.
essayez d'ajouter les éléments suivants à l'obtenir pour fonctionner avec Obtient si (requête.Méthode == HttpMethod.Get) { demande.Contenu = null; }
OriginalL'auteur Yazan Ati
Il suffit d'exécuter la même tâche et le devoir ajouter quelques lignes de plus en plus rédigé par Ati réponse.
OriginalL'auteur Veikedo