diff options
author | franck cuny <franck@lumberjaph.net> | 2010-09-15 14:09:21 +0200 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-09-15 14:09:21 +0200 |
commit | 0a17df876e787d653f4e196f1d438d8ce2699d8d (patch) | |
tree | 3281d951b8484d4e3eaa369b2ce3a96b8128352e | |
parent | update specification (diff) | |
download | net-http-spore-0a17df876e787d653f4e196f1d438d8ce2699d8d.tar.gz |
fix pod
-rw-r--r-- | spec/spore_description.pod | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/spec/spore_description.pod b/spec/spore_description.pod new file mode 100644 index 0000000..b8bc455 --- /dev/null +++ b/spec/spore_description.pod @@ -0,0 +1,256 @@ +=encoding utf-8 + +=head1 NAME + +Spore (Specifications to a POrtable Rest Environment) Description Implementation + +=head1 ABSTRACT + +Spore is a specification for describing ReST API that can be parsed and used +automatically by client implementations to communicate with the descibed API. + +This document describes how to write the description for a ReST API in +order to be used with a SPORE Client Implementation. + +=head1 TERMINOLOGY + +=over 4 + +=item API + +An I<API> is a ReST application that can exchange data with client +applications over http/https. It presents one or more method endpoints which +accept http requests with varying headers, parameters and body content to +perform specific operations. + +=item Client implementation + +A I<Client implementation> is a library targeting a specific system or +language. It can use I<Descriptions files> to create programmatic interfaces +usable in applications. + +=item Description file + +A I<Description file> is a file in JSON format describing an I<API> (see +specification). It can directly be used by a I<Client implementation> to +create a programmatic interface in the target system. + +=back + +=head1 API DESCRIPTION + +An API should provide a description file. The description should be in JSON +format. + +=head2 GENERIC DESCRIPTION + +This part describes the API itself: + +=over 4 + +=item B<name> (optional) + +A simple name to describe the specification + + name: CouchDB + +=item B<author> (optional) + +A list of authors for this specification + + author: + - franck cuny <franck@lumberjaph.net> + +=item B<api_base_url> (optional) + +If the API has a fixed URL + + api_base_url: http://api.twitter.com/1/ + +=item B<api_format> (optional) + +A list of supported format + + api_format: + - json + - xml + +=item B<version> (optinal) + +The version number of the current description + + version: 0.1 + +=item B<authentication> (optional) + +A boolean to specify if this API requires authentication for all the methods + + authentication: 1 + +=item B<methods> (required) + +A list of methods + +=back + +The desciption B<MUST> contain a list of at least one method + +=head2 METHOD DESCRIPTION + +A method must have a name: + + public_timeline + +=over 4 + +=item B<method> (required) + +An HTTP method + + method: GET + +=item B<path> (required) + +Path for the given method. The path can contain B<placeholders>. A placeholder +B<MUST> begin with a <:>: + + path: /statuses/public_timeline.:format + +=item B<params> (optional) + +A list of parameters. This list will be used to replace value in placeholders, +and if not used in the path, will be added to the query + + params: + - trim_user + - include_entities + +=item B<required> (optional) + +A list of required parameters. Parameters that are required B<MUST NOT> be +repeated in the B<params> field + + required: + - format + +=item B<expected> (optional) + +A list of accepted HTTP status for this method + + expected: + - 200 + +=item B<description> (optional) + +A simple description for the method. This should not be considered as +documentation. + + description: Returns the 20 most recent statuses, including retweets if they exist, from non-protected users + +=item B<authentication> (optional) + +A boolean to specify if this method requires authentication + + authentication: 0 + +=item B<api_base_url> (optional) + +Specify an url if this method requires a different api_base_url + + api_base_url: http://api.twitter.com/1/ + +=item B<documentation> (optional) + +A complete documentation for the given method + + documentation: The public timeline is cached for 60 seconds. Requesting more frequently than that will not return any more data, and will count against your rate limit usage. + +=back + +=head3 SAMPLE + +A description for the twitter API (only the API description part and the first method): + + { + "api_base_url" : "http://api.twitter.com/1", + "version" : "0.1", + "methods" : { + "public_timeline" : { + "params" : [ + "trim_user", + "include_entities" + ], + "required" : [ + "format" + ], + "path" : "/statuses/public_timeline.:format", + "method" : "GET" + }, + } + } + +=head3 CALLS + +=head1 CHANGELOGS + +0.1: 2010.10.xx + +=over 4 + +=item * + +Initial version. + +=back + +=head1 ACKNOWLEDGEMENTS + +Some parts of this specification are adopted from the following specifications. + +=over 4 + +=item * + +PSGI Specification L<PSGI|http://search.cpan.org/perldoc?PSGI> + +=item * + +PEP333 Python Web Server Gateway Interface L<http://www.python.org/dev/peps/pep-0333> + +=item * + +Rack L<http://rack.rubyforge.org/doc/SPEC.html> + +=item * + +JSGI Specification L<http://jackjs.org/jsgi-spec.html> + +=back + +I'd like to thank authors of these great documents. + +=head1 AUTHOR + +=over 4 + +=item franck cuny + +=item nils grunwald + +=back + +=head1 CONTRIBUTORS + +=over 4 + +=item damien "bl0b" leroux + +=back + +=head1 COPYRIGHT AND LICENSE + +Copyright XXX, 2010. + +This document is licensed under the Creative Commons license by-sa. + +=cut |