Changeset - fee9895fa46e
[Not reviewed]
beta
0 2 0
Marcin Kuzminski - 14 years ago 2011-11-21 02:08:09
marcin@python-works.com
changed API to match fully JSON-RPC specs
2 files changed with 13 insertions and 7 deletions:
0 comments (0 inline, 0 general)
docs/api/api.rst
Show inline comments
 
@@ -11,18 +11,20 @@ with JSON protocol both ways. An url to 
 
<your_server>/_admin/api
 

	
 

	
 
All clients need to send JSON data in such format::
 
All clients are required to send JSON-RPC spec JSON data::
 

	
 
    {
 
    {   
 
        "id:<id>,
 
        "api_key":"<api_key>",
 
        "method":"<method_name>",
 
        "args":{"<arg_key>":"<arg_val>"}
 
    }
 

	
 
Example call for autopulling remotes repos using curl::
 
    curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}'
 
    curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,"api_key":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull","args":{"repo":"CPython"}}'
 

	
 
Simply provide
 
 - *id* A value of any type, which is used to match the response with the request that it is replying to.
 
 - *api_key* for access and permission validation.
 
 - *method* is name of method to call
 
 - *args* is an key:value list of arguments to pass to method
 
@@ -32,9 +34,10 @@ Simply provide
 
    api_key can be found in your user account page
 

	
 

	
 
RhodeCode API will return always a JSON formatted answer::
 
RhodeCode API will return always a JSON-RPC response::
 

	
 
    {
 
    {   
 
        "id":<id>,
 
        "result": "<result>",
 
        "error": null
 
    }
rhodecode/controllers/api/__init__.py
Show inline comments
 
@@ -50,6 +50,7 @@ class JSONRPCError(BaseException):
 

	
 
    def __init__(self, message):
 
        self.message = message
 
        super(JSONRPCError, self).__init__()
 

	
 
    def __str__(self):
 
        return str(self.message)
 
@@ -60,7 +61,7 @@ def jsonrpc_error(message, code=None):
 
    Generate a Response object with a JSON-RPC error body
 
    """
 
    from pylons.controllers.util import Response
 
    resp = Response(body=json.dumps(dict(result=None, error=message)),
 
    resp = Response(body=json.dumps(dict(id=None, result=None, error=message)),
 
                    status=code,
 
                    content_type='application/json')
 
    return resp
 
@@ -117,6 +118,7 @@ class JSONRPCController(WSGIController):
 
        # check AUTH based on API KEY
 
        try:
 
            self._req_api_key = json_body['api_key']
 
            self._req_id = json_body['id']
 
            self._req_method = json_body['method']
 
            self._req_params = json_body['args']
 
            log.debug('method: %s, params: %s',
 
@@ -220,7 +222,8 @@ class JSONRPCController(WSGIController):
 
        if self._error is not None:
 
            raw_response = None
 

	
 
        response = dict(result=raw_response, error=self._error)
 
        response = dict(id=self._req_id, result=raw_response,
 
                        error=self._error)
 

	
 
        try:
 
            return json.dumps(response)
0 comments (0 inline, 0 general)