summaryrefslogtreecommitdiff
path: root/posts/2009-12-20-moosex-net-api.org
diff options
context:
space:
mode:
authorFranck Cuny <franck.cuny@gmail.com>2016-08-10 14:33:04 -0700
committerFranck Cuny <franck.cuny@gmail.com>2016-08-10 20:17:56 -0700
commit8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d (patch)
treea6cecddaaea7e87d901a6c28bebe3a531438f24b /posts/2009-12-20-moosex-net-api.org
parentMerge branch 'convert-to-org' (diff)
downloadlumberjaph-8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d.tar.gz
convert back to md
Diffstat (limited to '')
-rw-r--r--posts/2009-12-20-moosex-net-api.org137
1 files changed, 0 insertions, 137 deletions
diff --git a/posts/2009-12-20-moosex-net-api.org b/posts/2009-12-20-moosex-net-api.org
deleted file mode 100644
index 4d90494..0000000
--- a/posts/2009-12-20-moosex-net-api.org
+++ /dev/null
@@ -1,137 +0,0 @@
-** Net::Twitter
-
-I've been asked for [[http://linkfluence.net][$work]] to write an API
-client for [[http://www.backtype.com/][backtype]], as we plan to
-integrate it in one of our services. A couple of days before I was
-reading the
-[[http://search.cpan.org/perldoc?Net::Twitter][Net::Twitter]] source
-code, and I've found interesting how
-[[http://blog.questright.com/][semifor]] wrote it.
-
-Basically, what Net::Twitter does is this: for each API method, there is
-a =twitter_api_method= method, where the only code for this method is an
-API specification of the method. Let's look at the public timeline
-method:
-
-#+BEGIN_SRC perl
- twitter_api_method home_timeline => (
- description => <<'',
- Returns the 20 most recent statuses, including retweets, posted by the
- authenticating user and that user's friends. This is the equivalent of
- /timeline/home on the Web.
-
- path => 'statuses/home_timeline',
- method => 'GET',
- params => [qw/since_id max_id count page/],
- required => [],
- returns => 'ArrayRef[Status]',
- );
-#+END_SRC
-
-The =twitter_api_method= method is exported with Moose::Exporter. It
-generates a sub called =home_timeline= that is added to the class.
-
-** MooseX::Net::API
-
-As I've found this approch nice and simple, I thought about writing a
-[[http://git.lumberjaph.net/p5-moosex-net-api.git/][little framework]]
-to easily write API client this way. I will show how I've write a
-[[http://git.lumberjaph.net/p5-net-backtype.git/][client for the
-Backtype API]] using this (I've wrote some other client for private API
-at works too).
-
-** Backtype API
-
-First we defined our class:
-
-#+BEGIN_SRC perl
- package Net::Backtweet;
- use Moose;
- use MooseX::Net::API;
-#+END_SRC
-
-MooseX::Net::API export two methods: =net_api_declare= and
-=net_api_method=. The first method is for all the paramters that are
-common for each method. For Backtype, I'll get this:
-
-#+BEGIN_SRC perl
- net_api_declare backtweet => (
- base_url => 'http://backtweets.com',
- format => 'json',
- format_mode => 'append',
- );
-#+END_SRC
-
-This set
-
-- the base URL for the API
-- the format is JSON
-- some API use an extension at the name of the method to determine the
- format. "append" do this.
-
-Right now three formats are supported: xml json and yaml. Two modes are
-supported: =append= and =content-type=.
-
-Now the =net_api_method= method.
-
-#+BEGIN_SRC perl
- net_api_method backtweet_search => (
- path => '/search',
- method => 'GET',
- params => [qw/q since key/],
- required => [qw/q key/],
- expected => [qw/200/],
- );
-#+END_SRC
-
-- path: path for the method (required)
-- method: how to acces this resource (GET POST PUT and DELETE are
- supported) (required)
-- params: list of parameters to access this resource (required)
-- required: which keys are required
-- expected: list of HTTP code accepted
-
-To use it:
-
-#+BEGIN_SRC perl
- my $backtype = Net::Bactype->new();
- my $res =
- $backtype->backtweet_search(q => "http://lumberjaph.net", key => "foo");
- warn Dump $res->{tweets};
-#+END_SRC
-
-** MooseX::Net::API implementation
-
-Now, what is done by the framework. The =net_api_declare= method add
-various attributes to the class:
-
-- api\_base\_url: base URL of the API
-- api\_format: format for the query
-- api\_format\_mode: how the format is used (append or content-type)
-- api\_authentication: if the API requires authentication
-- api\_username: the username for accessing the resource
-- api\_password: the password
-- api\_authentication: does the resource requires to be authenticated
-
-It will also apply two roles, for serialization and deserialization,
-unless you provides your own roles for this. You can provides your own
-method for useragent and authentication too (the module only do basic
-authentication).
-
-For the =net_api_method= method, you can overload the authentication (in
-case some resources requires authentication). You can also overload the
-default code generated.
-
-In case there is an error, an MooseX::Net::API::Error will be throw.
-
-** Conclusion
-
-Right now, this module is not finished. I'm looking for suggestions
-(what should be added, done better, how I can improve stuff, ...). I'm
-not aiming to handle all possibles API, but at least most of the REST
-API avaible. I've uploaded a first version of
-[[http://search.cpan.org/perldoc?MooseX::Net::API][MooseX::Net::API]]
-and [[http://search.cpan.org/perldoc?Net::Backtype][Net::Backtype]] on
-CPAN, and [[http://git.lumberjaph.net/p5-net-backtype.git/][the code]]
-is also [[http://git.lumberjaph.net/p5-moosex-net-api.git/][available on
-my git server]].