Comments (8)
Personally I think it should only be explicit. It should be on the user to know what they are returning. They should know if you are returning text() or json(), and put it on the return. I do not thing it detracts from the usability at all. Even putting in the isinstance(response, HTTPResponse)
first adds an additional call to isinstance which should not be needed at all. It gets added to every single return, meaning (based on the benchmarks) 30,000 calls to isinstance / second, which just seems like unnecessary overhead for something that should already be known by the user. And if they do not know what type it is, they can do an if before the return. Just personally it seems like an unnecessary feature when the number one purpose of the system (to me at least) is to go fast. Anything that slows the system down, even by a tiny fraction, isn't worth it to me.
I may be a bit overly concerned. Based on a bit of timeit, it may only take a 0.2% hit in performance. Which isn't really that much, but I am afraid of 100 little 0.2% hits adding up to a massive hit.
from sanic.
Maybe a bit more descriptive error message could be added to make Sanic a bit more beginner friendly? If you're coming from flask with only the current error it's kinda hard to figure out.
from sanic.
I like this, on another note we should also be allowed to return a dict and it automatically converts to json
from sanic.
I think explicit is probably better the implicit. Does this change any of the benchmarks? If it slows things at all, may not be worth it.
from sanic.
@eseglem From an outside opinion, I would say that you are still allowed to do it by explicitly using a HTTPResponse. And the terseness of not having to put redundant information about the response is a huge usability feature.
Also while I don't believe the two isinstance checks will slow performance, if it is a concern there could be an initial isinstance check for HTTPResponse to short circuit the other checks
(regarding #52)
if isinstance(response, HTTPResponse): pass
from sanic.
@eseglem Good points. I certainly can't argue with explicit over implicit. Especially with the main goal of goin' fast
, anything that user can declare that the code doesn't have to compute is a definite win.
from sanic.
How often are you using raw text or html response vs json or template in real projects? I don't think we need any sugar foo so rare cases.
from sanic.
I think this one is done. Will re-open if there's a more performant way to do it.
from sanic.
Related Issues (20)
- Sanic stops working after trying to open a WS connection HOT 1
- How can I use the Response streaming technique in a POST method? HOT 2
- Shutdown never finishes when background tasks are cancelled but need some time to finish
- EOFError in Server Manager HOT 2
- Start-up exception HOT 1
- openapi json exception
- The RESTful API has redundant path parameters HOT 1
- Response streaming produces [ERROR] Invalid response type None (need HTTPResponse)
- Unexpected behavior with bp.middleware() using classes HOT 2
- δΈδΈͺζ±ε© HOT 1
- "body not consumed" error on GET request with content-length=0 HOT 1
- mypy error type for async get function in HTTPMethodView HOT 2
- Unexpected behaviour with REQUEST_MAX_HEADER_SIZE HOT 1
- Unexpected behavior when using blueprint groups and app.url_for HOT 1
- How to avoid abort when the code throw an Exception HOT 1
- Sanic drops part of HTTP response data HOT 7
- REQUEST_TIMEOUT & RESPONSE_TIMEOUT not working
- Documentation Hidden by Menu HOT 1
- Native Gzip & Brotli compression HOT 3
- AttributeError: 'Sanic' object has no attribute 'multiplexer' HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sanic.