lnbits/docs/guide/fastapi_transition.md
2021-09-11 12:28:29 +02:00

1.3 KiB

Returning data from API calls

old:

return (
    {
        "id": wallet.wallet.id, 
        "name": wallet.wallet.name, 
        "balance": wallet.wallet.balance_msat
    },
    HTTPStatus.OK,
)

FastAPI returns HTTPStatus.OK by default id no Exception is raised

new:

return {
    "id": wallet.wallet.id, 
    "name": wallet.wallet.name, 
    "balance": wallet.wallet.balance_msat
}

To change the default HTTPStatus, add it to the path decorator

@core_app.post("/api/v1/payments", status_code=HTTPStatus.CREATED)
async def payments():
    pass

Raise exceptions

old:

return (
    {"message": f"Failed to connect to {domain}."},
    HTTPStatus.BAD_REQUEST,
)
# or the Quart way via abort function
abort(HTTPStatus.INTERNAL_SERVER_ERROR, "Could not process withdraw LNURL.")

new:

Raise an exception to return a status code other than the default status code.

raise HTTPException(
    status_code=HTTPStatus.BAD_REQUEST,
    detail=f"Failed to connect to {domain}."
)

Possible optimizations

Use Redis as a cache server

Instead of hitting the database over and over again, we can store a short lived object in Redis for an arbitrary key. Example:

  • Get transactions for a wallet ID
  • User data for a user id
  • Wallet data for a Admin / Invoice key