Take the 2-minute tour ×
Stack Apps is a question and answer site for apps, scripts, and development with the Stack Exchange API. It's 100% free, no registration required.

BridgeStack

BridgeStack

This is a StackExchange API v2.0 consumer library written under C#. It is heavily documented and designed to make it as easy as possible to interact with the API.

Example Usage

To get the name of each silver badge you've been awarded on Stack Overflow:

var client = new StackClientFactory().Create(_appKey, _token);
client.Default.Site = NetworkSiteEnum.StackOverflow;
var parameters = new BadgesOnUserQuery
{
    Sort = QuerySortEnum.BadgeRank,
    Min = BadgeRankEnum.Silver,
    Max = BadgeRankEnum.Silver
};
var badges = client.GetMyBadges(parameters);

foreach (var badge in badges)
{
    Console.WriteLine(badge.Name);
}

Line by Line Explanation:

var client = new StackClientFactory().Create(_appKey, _token);

A StackClient instance is created, passing in your application's key and the user's access token.

client.Default.Site = NetworkSiteEnum.StackOverflow;

A default is set so that all requests made through this client which require a target site use Stack Overflow

var parameters = new BadgesOnUserQuery
{
    Sort = QuerySortEnum.BadgeRank,
    Min = BadgeRankEnum.Silver,
    Max = BadgeRankEnum.Silver
};

A query parameter object is created, using the Rank sort on badges, and setting the range to only Silver badges.

var badges = client.GetMyBadges(parameters);

The API is accessed, and the user badges are received from StackExchange.

foreach (var badge in badges)
{
    Console.WriteLine(badge.Name);
}

The badges are then iterated, and their names are output to the console. Note that badges, while an IEnumerable<T>, contains valuable data other than the actual list items, like paging info, the actual response, exceptions that might have been thrown (and be the reason the enumeration is empty), etc.

About

You can read the wiki documentation on GitHub here.

I created BridgeStack as a way to give back to the StackOverflow community, which has helped me out and taught me on countless ocassions.

At all times I attempted to mantain the same philosophy in writting this library. I documented every method, reused as much code as possibly, mirrored the API as heavily as possible, and generally designed it with wrapping away complexity in mind.
I would appreciate if you let me know what you think of it. I'm sure there's a lot of room for improvement.

Another goal in BridgeStack is to keep the code as clean and it's public facing interfaces as simple as possible.

Update

I've implemented multi-threading safe response caching and request throttling, these are explained in this post.

Download

BridgeStack can be downloaded following this link on GitHub.

License

I'm going with GPL

Platform

C# .NET 4.0

Contact

Nicolas Bevacqua

Code

BridgeStack was written under C# .NET 4.0, though I assume it wouldn't be a problem to port it to other plaforms if enough people were interested in it. You can find the full source code on GitHub.

share|improve this question
add comment

1 Answer

Event Logging, Caching and Throttling

I've just finished implementing these features.

Event Logging is a new feature that allows us to debug different methods on the bridge by hooking the events at client.EventLog, and examining the messages logged there.

Caching was already present on the previous version of the bridge, but it now supports multi-threading, and identical requests against the API are only made once even when using parallelism.

Request throttling wasn't part of the bridge up until now, the request throttler works similarly to other throttlers out there, providing a configurable sliding window of three seconds during which up to 30 requests can be executed, and a configurable maximum of 15 concurrent requests against the API.

You can read more about caching and throttling on BridgeStack on the wiki entry at GitHub.

share|improve this answer
add comment

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .