Skip to content

Salience/FluentApi

Repository files navigation

FluentApi

A simple wrapper around RestSharp and Json.NET, designed to ease the writing of requests to REST APIs while taking care of errors management and tracing.

Just describe how your requests should be built and let the client take care of the rest!

Example of usage (based on Twitter API):

class Program
{
    static void Main(string[] args)
    {
        // Use Application-only authentication to obtain a bearer token
        var oauthClient = new FluentClient("https://api.twitter.com");
        //oauthClient.AddTrace(new ConsoleTraceWriter()); // uncomment to see requests in console
        oauthClient.SetAuthenticator(new HttpBasicAuthenticator("<yourApiKey>", "<yourSecret>"));
            
        var obtainBearerTokenRequest = oauthClient
            .To("obtain a bearer token")
            .Post("oauth2/token", r => r
                .AddParameter("grant_type", "client_credentials", ParameterType.GetOrPost))
            .Expecting((dynamic response) => (string)response.access_token);

        var accessToken = obtainBearerTokenRequest.Execute();

        // Authenticate API requests with the bearer token
        var apiClient = new FluentClient("https://api.twitter.com", "/1.1");
        apiClient.SetAuthenticator(
            new OAuth2AuthorizationRequestHeaderAuthenticator(accessToken, "Bearer"));

        // Twitter use underscores but we love PascalCase
        apiClient.Serializer.ContractResolver =
            new UnderscorePropertyNamesContractResolver();

        // Use the authenticated client to perform requests
        var searchTweetsRequest = apiClient
            .To("search for tweets")
            .Get("search/tweets.json", r => r
                .AddParameter("q", "@twitterapi")
                .AddParameter("result_type", "recent")
                .AddParameter("count", 50))
            .Expecting((TwitterSearchResult result) => result.Statuses);

        var tweets = searchTweetsRequest.Execute();
        Console.WriteLine("=== RESULTS ===");
        foreach(var tweet in tweets)
        {
            Console.WriteLine("@{0}: \"{1}\" at {2}{3}", 
                tweet.User.ScreenName, tweet.Text, tweet.CreatedAt, Environment.NewLine);
        }

        Console.ReadLine();
    }

    class TwitterUser
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public string ScreenName { get; set; }
        public string Description { get; set; }

        public int FollowersCount { get; set; }
        public int FriendsCount { get; set; }
    }

    class TwitterStatus
    {
        public string CreatedAt { get; set; }

        public long Id { get; set; }
        public TwitterUser User { get; set; }
        public string Text { get; set; }

        public bool Favorited { get; set; }
        public bool Retweeted { get; set; }
    }

    class TwitterSearchResult
    {
        public TwitterStatus[] Statuses { get; set; }
    }
}

About

A simple wrapper around RestSharp and Json.NET

Resources

License

Stars

0 stars

Watchers

3 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages