[ckan-discuss] REST API Error Messages

John Bywater john.bywater at appropriatesoftware.net
Thu Jul 29 16:13:19 BST 2010

Hi Friedrich,

Friedrich Lindenberg wrote:
> Hi John,
> I just saw your notice on http://okfnpad.org/ckan regarding API error
> messages. The task was inspired by Glen Barnes' recent troubles in
> getting a ruby client to talk to CKAN via the REST API.
> What I would like to change here is three things:
> a) Wrap some of the controller actions in a try/catch and return the
> exception message along with 500 server errors to give clients a clue
> as to what is wrong.
> b) Add extensive logging on the server, including stack traces.
> c) Wrap any error messages returned by the server in a JSON
> dictionary. This makes recognizing them easier for clients
> (essentially, I can still json.loads() them and then check if they
> have an 'error' key) and it allows client to output a more meaningful
> message. It is a bit redundant, though, given that we also return a >=
> 400 status code.
> What's your opinion on these changes? Would they be useful? And: would
> you consider (c) to break the API 1 contract (and have this moved into
> v2)?

Oh, I think it's excellent! Did you see my comment on Glen's ticket?


Thanks a lot! I totally agree and have already started working on this. 
For example, try pointing your browser to 
http://ckan.net/api/search/revision  (ie without any arguments). Also, 
there is probably a lot less HTML than there was, since the errors are 
not handled as if it was an error within the "Web" user interface. At 
any rate, perhaps we could work through the error cases, filling in the 
tests as we go? I think it's just unworked ground, rather than anything 
deliberate. :-)

There are three things that concern me:

1. Disturbing (or not) the API Version 1. On one hand, I feel we should 
try to avoid disturbing the API Version 1 if possible, because it is 
being used in production Web sites. So, to do it only in API Version 2. 
But we could first try to duplicate the current behaviour in API Version 
1, then implement the better behaviour on the base API class. So does 
that mean we should try to start on the Version 2 tests, then build up 
the Version 2 class?

On the other hand, as well as not having implemented them, I feel that 
we have never specified or documented the behaviour, so should there 
shouldn't be an expectation, and we should feel free to do whatever is 
now wanted to improve the error cases.

2. Putting status in the response body. It's not an terribly strong 
preference, but I'd rather the status was not repeated in the response 
body. But having a single error data format for all error response 
messages would be a fine thing. :-)

3. Validation resources. I wonder whether it might be useful to 
distinguish between true system errors (some of which may occasionally 
reveal sensitive information) from validation error (which could be 
prepared on a case by case basis, and which would be designed not to 
reveal sensitive information). Perhaps true system errors should not be 
disclosed, due to the hazard indicated above. However, we could provide 
validation resources, which would response by listing any errors that 
would mean submitting the data as a create or update operation would not 
succeed. That would repeat the distinction in the Web UI, where nothing 
is revealed about system errors. However, validation errors are 
indicated to guide the user towards a successful submission. The 
system-wide requirement might be: "don't publish system errors to 
users". We could equally send validation errors in responses to create 
messages, but just wrapping the whole method in a try/except and 
returning something about whatever error happens to occur seems a bit 
too indiscriminate.

What do you think about that? :-)

Best wishes,


> Regards,
>  Friedrich

More information about the ckan-discuss mailing list