-
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Option to infer response_model #620
Comments
Nice! I like this much better than duplicating it like this:
|
For anyone following this thread, I've released fastapi-utils which includes the You can read the docs here: https://fastapi-utils.davidmontague.xyz/user-guide/inferring-router/ |
I would love this! To be honest when I was reading the doc it was not obvious why this was not already implemented. As all inputs use annotations, it feels like the output should too. Reading the fastapi-utils documentation actually gives me some advices on why someone would like it to not be the case. I think the official documentation could explain this choice like the fastapi-utils one does. |
Thanks for the clear explanation and argument @dmontagu . Yeah, it makes sense having it as an optional feature. And I see a lot of people would like that. I think we might want to have a way to override the function annotation setting We could do something similar to what I did in Typer to handle all those defaults overridable with |
On another note, about why that's not the default, it's in the Technical Details note here: https://fastapi.tiangolo.com/tutorial/response-model/ Could it be explained better? I see a lot of people ask about it although it's there, and I'm not sure how else should we document it to make it more understandable. |
I missed that, but it seems to be in the correct place and well explained. |
I have a PoC ready for making this work. But its not ready to be pushed
yet... Will update you on this.
…On Tue, Feb 11, 2020, 11:23 Alexandre Morignot ***@***.***> wrote:
On another note, about why that's not the default, it's in the Technical
Details note here: https://fastapi.tiangolo.com/tutorial/response-model/
Could it be explained better? I see a lot of people ask about it although
it's there, and I'm not sure how else should we document it to make it more
understandable.
I missed that, but it seems to be in the correct place and well explained.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#620>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAGH5MLUL3B7D23DOC5NAELRCJ4B5ANCNFSM4JAJBJGA>
.
|
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
Is your feature request related to a problem? Please describe.
Primarily for the sake of the generated OpenAPI spec (but also for security/validation reasons), I currently specify a
response_model
for nearly all of my endpoints, but for the vast majority of my endpoints, theresponse_model
is the same as the type that the endpoint returns.This means that I am frequently duplicating the
response_model
in the return annotation.In order to reduce duplication/room for copying/refactoring mistakes, it would be great if it were possible to (optionally) infer the
response_model
from the endpoint signature.It should still be possible to override the value, and it should be ignored if a raw
Response
class is returned, I would just want the default to be the annotated return type of the endpoint. Note: this implementation would also make it much easier to catch anywhere theresponse_model
differed from the returned value's type while scanning through code.To be clear, I don't think this needs to be the default behavior, I just would like the option to enable it.
I am currently using the following subclass of
APIRouter
in my code to enable this:I think it would be nice if this capability was upstreamed though, both to ensure it is maintained, but also so others can benefit.
Describe the solution you'd like
Rather than using the above implementation (which has some problems -- for example, it isn't possible to specify
None
as theresponse_model
with an annotated return type), I think it would be better if there were a boolean-valued keyword argument to theAPIRouter
initializer that, if enabled, would cause the default behavior to be to have the annotated return type used as theresponse_model
by default.The text was updated successfully, but these errors were encountered: