将第三方API映射到一个API

时间:2013-11-11 17:06:01

标签: c# json rest asp.net-web-api

我正在为几个不同的第三方API创建一个包装器,以有效地公开一个Web API

所以我的API会有类似的东西:

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

响应:

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

但这实际上会在内部调用

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

响应:

{
    "speed": 123
}

然后调用/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
}

但这意味着硬编码的东西并不好。

有更好的想法吗?

1 个答案:

答案 0 :(得分: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调用,然后为每个第三方提供一个实现。