What HTTP error code for failure to create a new resource because a parent entity is gone

19,346

Solution 1

Not a 500, because there is no problem with the server.

I would suggest 409 Conflict.

From the RFC:

The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required. Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.

It doesn't exactly match your case, but it is very close IMHO.

For example the server could tell you the parent resource does not exist for you to post to, and you can "resubmit" the employee to a different company. :)

Solution 2

I ran in the same situation here.

After evaluating the HTTP Status code options, it appears to me the best option is to return a 424 Failed Dependency

The 424 (Failed Dependency) status code means that the method could not be performed on the resource because the requested action depended on another action and that action failed. For example, if a command in a PROPPATCH method fails, then, at minimum, the rest of the commands will also fail with 424 (Failed Dependency).

From RFC

Share:
19,346
andyc
Author by

andyc

Updated on June 16, 2022

Comments

  • andyc
    andyc almost 2 years

    Say i have an API exposing two related resources, Company which has many Employees.

    Say I create a new Company: POST http://domain/api/company/ which returns something like http://domain/api/company/123.

    If company/123 is removed from the system (say by a DELETE) then GET http://domain/api/company/123 could return HTTP response code 410 (Gone).

    My question is this. If I now try to create an Employee under Company/123 by doing POST http://domain/api/employees/ (with companyId set to 123 in the request body) what HTTP response code should be sent back by the server due to the invalid request?

    E.g. the request is correctly formated, but there is a logical error due to the fact that company 123 is gone.

    Internal Server Error 500?

  • andyc
    andyc over 12 years
    I'm surprised this is not a more common question given that REST APIs generally guide us towards operations on individual entities. Thanks for your response.