HTTP Status Codes¶
In MVI, when an API entrypoint function gets to a return
statement, the
default behaviour is to respond with a status code of 200. If an exception
is raised somewhere in the function, it will return a 500 Internal Server Error-response,
which just means that there has been an internal error. Generally you never
want to show any 500-responses to the users of the API. Let’s look at an example
that responds with other status codes to see how it can be done:
import logging
from mvi import service
from mvi.exceptions import HTTPException
logger = logging.getLogger(__name__)
STORAGE_DICTS = dict()
@service.entrypoint(status_code=201)
def create_new_dict(dict_name: str, content: dict):
if STORAGE_DICTS.get(dict_name, False):
raise HTTPException(status_code=409, detail=f"{dict_name} already exists")
STORAGE_DICTS[dict_name] = content
return "Created"
@service.entrypoint()
def get_dict(dict_name: str):
return STORAGE_DICTS[dict_name]
if __name__ == "__main__":
service.run()
For create_new_dict()
in this example, we have changed the status code
of a successful request to be 201 Created instead of 200 OK. If we try to
create a new dictionary when it already exists we raise an HTTPException
,
which makes the entrypoint respond with that status code and the detail in
the response body.
Note
Here is a full list of HTTP status codes