You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While I was trying to switch our webapp at work from the dead starlette-jsonapi to your new and shiny FastAPI-JSONAPI, I understood I really miss one important thing (at least for me).
I noticed that in FastAPI-JSONAPI there is an HTTP-layer (view classes) and a persistence-layer (e.g. SqlalchemyDataLayer), but there is no a dedicated logic layer. Of cource, one can redefine methods of view classes or embed theirs business logic in SqlalchemyDataLayer methods, but it all would lead to a high coupling between the business logic and the FastAPI-JSONAPI framework.
So, I think it would be great if view classes triggered not the data layer right away, but methods of a dedicated logic class.
Something like this:
class SqlalchemyDataLayer(...):
...
async get_one_object(entity_Id, **kwargs):
....
class LogicLayer(...):
....
async get_one_object(self, entity_id, data_layer, **kwargs):
# does whatever business logic requires
# like sending an event somewhere, do some calculations, check some business rules, calls other microservices or any external APIs etc
db_entity = await data_layer.get_object(entity_id)
# converts ORM object to pydantic model, also provides a method that allow to customize this convertion
# does whatever business logic requires
return entity
class DetailViewBase(ViewBase):
...
async def handle_get_resource_detail(...):
# does some HTTP stuff, like validation, deserialization
obj = await self.logic_layer.get_one_object(obj_id, data_layer)
# the rest of the HTTP stuff
I did something like this in our webapp at work, but in order to do that I had to redefine a lot of FastAPI-JSONAPI internals, which, of course, can lead me to a lot of compatibility problems each time you update the framework
So it would be nice to have it out-of-the box if possible.
It's not like I anticipate you'll do it, because that's quite a lot of work and will definitely break the compatibility with the older versions, but if you would one day, it would be awesome
The text was updated successfully, but these errors were encountered:
Thank you for you great framework, guys :)
The following is more like a feature request
While I was trying to switch our webapp at work from the dead starlette-jsonapi to your new and shiny FastAPI-JSONAPI, I understood I really miss one important thing (at least for me).
I noticed that in FastAPI-JSONAPI there is an HTTP-layer (view classes) and a persistence-layer (e.g. SqlalchemyDataLayer), but there is no a dedicated logic layer. Of cource, one can redefine methods of view classes or embed theirs business logic in SqlalchemyDataLayer methods, but it all would lead to a high coupling between the business logic and the FastAPI-JSONAPI framework.
So, I think it would be great if view classes triggered not the data layer right away, but methods of a dedicated logic class.
Something like this:
I did something like this in our webapp at work, but in order to do that I had to redefine a lot of FastAPI-JSONAPI internals, which, of course, can lead me to a lot of compatibility problems each time you update the framework
So it would be nice to have it out-of-the box if possible.
It's not like I anticipate you'll do it, because that's quite a lot of work and will definitely break the compatibility with the older versions, but if you would one day, it would be awesome
The text was updated successfully, but these errors were encountered: