web-dev-qa-db-ja.com

HttpClientを介して外部REST Webサービスを使用するリポジトリパターンの例?

私はかなり検索しましたが、疎結合でASP.NETMVCアプリのようなものでリポジトリパターンを使用して外部REST Webサービスを使用する良い例は見つかりませんでしたオンラインで見つけたリポジトリパターンのほとんどすべての例は、SQLデータの書き込みまたはORMの使用です。HttpClientを使用してリポジトリにラップされたデータを取得する例をいくつか見てみたいと思います。

良い例への言及はありますか?または、誰かが簡単な例を書けますか?

10
Jiveman

簡単な例:

// You need interface to keep your repository usage abstracted
// from concrete implementation as this is the whole point of 
// repository pattern.
public interface IUserRepository
{
    Task<User> GetUserAsync(int userId);
}

public class UserRepository : IUserRepository
{
    private static string baseUrl = "https://example.com/api/"

    public async Task<User> GetUserAsync(int userId)
    {
        var userJson = await GetStringAsync(baseUrl + "users/" + userId);
        // Here I use Newtonsoft.Json to deserialize JSON string to User object
        var user = JsonConvert.DeserializeObject<User>(userJson);
        return user;
    }

    private static async Task<string> GetStringAsync(string url)
    {
        using (var httpClient = new HttpClient())
        {
            return await httpClient.GetStringAsync(url);
        }
    }
}

ここNewtonsoft.Jsonパッケージを入手する場所/方法です。


もう1つのオプションは、HttpClientオブジェクトを再利用してリポジトリをIDisposableにすることです。これは、HttpClientの処理が終わったら破棄する必要があるためです。私の最初の例では、HttpClientステートメントの最後のusing使用の直後に発生します。

11
Andrei