Webクライアントで別のサーバーに接続するために使用できるWeb API 2のメソッドの一般的なセットを作成する方法を探しています。Web Api 2複数のパラメータを持つ一般的なパススルーメソッド
まず、自分のインフラストラクチャについて説明します。私の会社で一般的に採用されている簡略化されたセットアップ(データベースサーバーなどを除く)は、2つのメインサーバーで構成されています。アプリケーションとサイトをホストするために使用されるWebレイヤーサーバーと、サービス/アプリケーションなどを含むアプリケーションレイヤーサーバーがあります。
ハウスルールは、Webサーバー上のアプリケーションがアプリケーション上のもの最初にプロキシまたはブローカサービスを経由せずに
この問題に対する私の現在の解決策は、api内のすべてのルートのコピーを含むSDK Web APIサービスを作成することです。アプリケーション(この場合はアングルアプリ)はREST APIコールを介してこのSDKサービスを呼び出します。この中間サービスの仕事は.NET HttpClientを使用してこの呼び出しを「実際の」APIサービスへの呼び出しに変換することです他のサーバー。
これは素晴らしいことですが、これまでのところ問題はありませんでしたが、このようなことをする良い方法があると感じています。私はこの種のことを記述する記事をオンラインで検索したが、短くなってしまった。私は.NETやWeb APIを使用する専門家ではない。
今私が持っている解決策の例を挙げておきます。私のデータベースに現在保存されているすべてのクライアントを取得する呼び出しです。
public class ClientsController: ApiController
{
// http client used to translate calls to api service
private HttpClient httpClient = new HttpClient()
{
BaseAddress = new Uri(ConfigurationManager.AppSettings["apiUrl"])
};
[Route("clients")]
[HttpGet]
public IHttpActionResult GetClients()
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json");
List<Client> clients = null;
try
{
HttpResponseMessage result = httpClient.GetAsync("clients").Result;
if (result.IsSuccessStatusCode)
{
clients = result.Content.ReadAsAsync<List<Client>>().Result;
return Content(result.StatusCode, clients);
}
// return the failed reason code
return Content(result.StatusCode, result.ReasonPhrase);
}
catch (Exception e)
{
return Content(HttpStatusCode.InternalServerError, e.Message);
}
}
}
このルートは、他のサーバー上で実行されている私のAPIサービスに実装され、データベースからクライアントを取得し、その後、私のアプリケーションに表示されるように戻るに戻って、このサービスへのクライアントのリストを返します。画面上。
api内のすべてのルートに対して、1組のメソッド(上に示したものと実際の実装)が存在します。
理想的には、各HTTP動詞に1つのメソッドを含めることができます。そこには渡されるルートがあり、apiサービスからそのルートが呼び出され、アイテムまたは結果コードの戻り値を処理します。それを2つの場所に追加することなく、新しいエンドポイントのセットをAPIに追加することができる点を除けば、現在の機能と似ています。
これは私が立ち往生した場所です。どのようにこれを行うことができたか、私が探検しなかった可能性があるいずれかの洞察は素晴らしいでしょう。
この長い質問をお読みいただきありがとうございます。
2つのWeb APIサーバーがあり、そのうちの1つは実サーバーで、もう1つは着信要求を実際のサーバーにリダイレクトする厳しい仲介者ですか?あれは正しいですか ? – Vladimir
@Vladimir yep thats right – peppermcknight