diff options
| author | Franck Cuny <franck.cuny@gmail.com> | 2016-08-10 14:33:04 -0700 |
|---|---|---|
| committer | Franck Cuny <franck.cuny@gmail.com> | 2016-08-10 20:17:56 -0700 |
| commit | 8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d (patch) | |
| tree | a6cecddaaea7e87d901a6c28bebe3a531438f24b /posts/2010-06-10-moosex-net-api-update.org | |
| parent | Merge branch 'convert-to-org' (diff) | |
| download | lumberjaph-8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d.tar.gz | |
convert back to md
Diffstat (limited to 'posts/2010-06-10-moosex-net-api-update.org')
| -rw-r--r-- | posts/2010-06-10-moosex-net-api-update.org | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/posts/2010-06-10-moosex-net-api-update.org b/posts/2010-06-10-moosex-net-api-update.org deleted file mode 100644 index f130447..0000000 --- a/posts/2010-06-10-moosex-net-api-update.org +++ /dev/null @@ -1,151 +0,0 @@ -[[http://git.lumberjaph.net/p5-moosex-net-api.git/][MooseX::Net::API]] -is a module to help writing clients for RESTful (and even non-RESTful) -WebServices: - -#+BEGIN_SRC perl - package my::api; - use MooseX::Net::API; - - net_api_declare myapi => ( - api_base_url => 'http://api....', - api_format => 'json', - ); - - net_api_method users => ( - method => 'GET', - path => '/users/:country', - description => 'fetch a list of users', - params => [qw/country/], - expected => [qw/200 404/], - ); -#+END_SRC - -We've been using this module at work for the last few months on various -internal APIs, and I'm pretty pleased with the result so far. - -Lately I've started to rework the core. I've tried to split most of the -functionalities into roles, and rework the code that generates the -various methods. I've also added methods to access miscellaneous -information : - -#+BEGIN_SRC perl - my $client = my::api->new; - - # to get a list of API methods - $client->meta->get_all_net_api_methods(); - - # find an API method - my $method = $client->meta->find_net_api_method_by_name('users'); - - # and now informations about the method - say $method->documentation; - - name: users - description: fetch a list of useres - method: GET - path: /users/:country - arguments: country - expected: 200, 404 -#+END_SRC - -It's not yet complete, but a new version will be available soon on CPAN. -Here is a list of some more features I plan to add quickly: - -- better internal API -- better authorization support (OAuth!) -- add more methods to provide better introspection -- better unserialization -- more tests and better documentation -- generate POD via a PODWeaver plugin ? -- plugins ? -- renaming ? (not sure it really fits in the MooseX:: namespace) - -** http-console - -I've also started -[[http://git.lumberjaph.net/p5-net-http-console.git/][Net::HTTP::Console]]. -It's inspired by -[[http://github.com/cloudhead/http-console][http-console]]. It relies on -MX::Net::API, and can use any libraries written with MX::Net::API, as -well as any *raw* RESTful API. As an example, let's use it on twitter. - -#+BEGIN_EXAMPLE - % http-console --url http://api.twitter.com --format json - - http://127.0.0.1:5984> GET /1/statuses/public_timeline - [ - { - "source" : "web", - "favorited" : false, - "geo" : null, - "coordinates" : null, - "place" : null, - ... - } - ] - - http://127.0.0.1:5984> show headers - cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 - last-modified: Mon, 07 Jun 2010 15:27:12 GMT - x-transaction: 1275924432-94882-31146 - x-ratelimit-reset: 1275925258 - ... -#+END_EXAMPLE - -You can call any method from the twitter API (at the exception of the -ones that require authentication: it's not supported yet). - -You can also use it with any library that uses MX::Net::API: - -#+BEGIN_EXAMPLE - % http-console --lib Net::Backtweet - - http://api.backtweet.com> help command - available commands: - - tweets\_by_url - - stats\_by_url - - good\_tweets_by_url - - http://api.backtype.com> help command tweets\_by_url - name: tweets_by_url - description: Retrieve tweets that link to a given URL, whether the links are shortened or unshortened. - method: GET - path: /tweets/search/links - - http://api.backtype.com> stats\_by_url {"q":"http://lumberjaph.net","key":s3kr3t"} - { - "tweetcount" : 388 - } -#+END_EXAMPLE - -Arguments to the methods are serialized in JSON format. Not sure if it's -the best idea I will see if it needs improvement while using it. You can -also perform POST and PUT with content. - -#+BEGIN_EXAMPLE - http://localhost:5984> POST /test_rtgi_fetcher {"foo":"bar"} - { - "ok" : true, - "rev" : "1-fe67006eb0e02e5f0057b5b2a6672391", - "id" : "fe3175615a34eb28153479307c000f26" - } -#+END_EXAMPLE - -It's far from being complete at the moment, but I will extend it -quickly. Right now, you can define global headers, and get help for all -methods in your MX::Net::API library. Authentication is on top of my -priority list, as is alias creation, so instead of doing (on a -non-moosex::net::api lib): =GET /users/= you will do: - -#+BEGIN_QUOTE - alias users/:country as users -#+END_QUOTE - -then: - -#+BEGIN_QUOTE - users {"country":"france"} -#+END_QUOTE - -(and yes, I've switched from wordpress to -[[http://github.com/perigrin/blawd][blawd]]). |
