summary refs log tree commit diff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-09-15 14:09:21 +0200
committerfranck cuny <franck@lumberjaph.net>2010-09-15 14:09:21 +0200
commit0a17df876e787d653f4e196f1d438d8ce2699d8d (patch)
tree3281d951b8484d4e3eaa369b2ce3a96b8128352e
parentupdate specification (diff)
downloadnet-http-spore-0a17df876e787d653f4e196f1d438d8ce2699d8d.tar.gz
fix pod
-rw-r--r--spec/spore_description.pod256
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