Excluding Response Fields and Huge Performance Hits #168
Description
Hey dudes,
Love Flask-Restless, but wanted to leave an issue here as I'd love to use the library, but a showstopper in my use case (and possibly that of other people) is that Flask-Restless really has no way (currently) to properly exclude database relationship queries with the pre and postprocessor stuff.
For instance, I have an application which has several models, namely:
State
and Person
. Each person has a state relationship (via ForeignKey).
My API clients need to frequently grab a list of all states in the system, so they'll do something like:
GET /api/states
And will immediately get their screen flooded with results (because Flask-Restless is traversing the backref and generating JSON for the millions of people in each state).
Even if I were to explicitly write a postprocessor for the GET_MANY
hook, this wouldn't really solve the problem as each request to my API endpoint /api/states
would still result in Flask-Restless spending an enormous amount of time loading my people
backref and eventually discarding that data and returning a response.
I think a good solution to this problem is what issue #161 is suggesting: have Flask-Restless only load foreign key relationships when they're explicitly eagerly loaded by Flask-SQLAlchemy.
I'm documenting this here for discussion purposes. Thank you.