0

1 つの Web API を効果的に公開するために、いくつかの異なるサードパーティ API のラッパーを作成しています。

したがって、私の API は次のようになります。

GET http://myapi.com/cars/1

応答:

{
    "name": "DB9",
    "make": "Aston Martin",
    "speed": 123
}

しかし、これは実際には内部的に呼び出します

GET http://astonmartinapi.com/db/9

応答:

{
    "speed": 123
}

次に、呼び出しは、内部的に呼び出す which で/cars/2応答します。{ "name": "mondeo", "make": "Ford", "speed": 34 }GET http://fordapi.com/vehicles/mondeo

私のサイトのさまざまなエンティティからこれらのサードパーティのサイトへのマップを実装するにはどうすればよいですか?


私が考えていたのは、マッパーを作成することでした:

public JsonResult Get(int id = 0)
{
    var car = db.Cars.Find(id);

    // check not null, etc

    switch (car.Make.Id) // refactor into method
    {
        case 1:
            // query astonmartinapi
            break;
        case 2:
            // query fordapi
            break;
    }

    // return stuff
}

しかし、これは良くないハードコーディングを意味します。

より良いアイデアはありますか?

4

1 に答える 1

2

ちょっと考えただけですが、次のようなインターフェースを書くことができます:

    public interface IExternalUrlProvider
    {
        string DownloadString(string baseUrl, string path);
        string GetString(string baseUri, string relativePath, string userName, string password, AuthenticationSchemes scheme);
        string Post(string baseUri, string relativePath, string userName, string password, AuthenticationSchemes scheme = AuthenticationSchemes.Basic, Dictionary<string, object> postParameters = null);
    }

...その後、それを実装して、一般的な REST 呼び出しを行うことができます。おまけとして、単体テスト用にインターフェースをモックすることもできます。

上記は、あなたができることのほんの一例です。明らかに、戻り値の型を JObject (Newtonsoft JSON ライブラリ) などに変更できます。

また、一般的な HTTP 呼び出しを作成することについてあまり意見が分かれていないインターフェイスを作成し、サード パーティごとに 1 つの実装を提供することもできます。

于 2013-11-11T22:53:37.377 に答える