Skip to main content
2 of 8
added 552 characters in body
Sky Sanders
  • 12.1k
  • 3
  • 32
  • 60

App devs - Would you use something like this if it were available?

The question is, would anyone be interested in using code that looks like this? Just like this and does what it says it will do?

Before I go any farther in extending Soapi.CS and Soapi.JS, I need to know if there is interest. Otherwise I will spend my time writing some apps.

I am actively begging for constructive or informative feedback, positive or negative. Please. Sometimes it feels like I am writing in the wilderness. ;-(

// what you see is what you would get. Imagine similar in JavaScript
// while it looks like LINQ, it is not quite. I am simply planning to 
// use dynamic proxies (ala NHibernate) to lazy load from the API.

ApiContext.Initialize(key);

// initialize simply fetches all sites and prepares them with
// the necessary data and functionality to serve as the root for
// all queries for that site. 

// initialization is done on a static method and happens only once
// for each appDomain. (appdomain is a scope of execution, 
// an application for example, NOT a web domain)

ApiContext ctx = new ApiContext();

User codePoet = ctx.Sites("api.stackapps.com").User(14);

foreach(Question q in codePoet.Questions())
{
  Console.WriteLine(q.Title);
  foreach(Answer a in q.Answers())
  {
    Console.WriteLine(a.Owner.DisplayName + " " + a.Owner.Reputation));
  }
}

// so you noticed the lazy loading in the  expressions above - this is where it
// gets more interesting....


IEnumerable<Question> codePoetsQuestionsOnStackOverflow 
   = codePoet.UserAssociation.Users
   .First(u=>u.Site.SiteId=="api.stackoverflow.com").Questions();

// what you see is a navigation from my stackapps User up into
// it's UserAssociation object (stackauth /users/{id}/associated), 
// finds the user who's site is stackoverflow and then returns all
//  of my stackoverflow questions. 



// Again, there are no strings - this code will run and give you exactly 
// what it says it will.

And this is without LINQ. When/if I accept the task and finish implementing this, Dave and I have been talking about merging this with StackLINQ to provide the kind of client library that will let you stop worrying about how to get data and let you concentrate on doing something interesting with it.

// real live linq

var someInterstingQuestions = ctx.Sites("api.stackapps.com")
.Questions.Where(q=>q.Title.Contains("foo") || 
q.Title.Contains("bar")).Skip(5).Take(10);

//

Can we get some pre-orders please?

Sky Sanders
  • 12.1k
  • 3
  • 32
  • 60