2017-02-22 45 views
0

我們正在使用的瓶的RESTful定義形式的API,瓶的RESTful錯誤處理時,包羅萬象的存在

bp = Blueprint('api', __name__, url_prefix='/api') 
api = Api(bp) 

@api.resource('/users/<int:user>') 
class User(Resource): 
    def get(self, user): 
     ... 

Catch-All一起使用反應呈現所有頁面。

bp = Blueprint('index', __name__) 

@bp.route('/', defaults={'path': ''}) 
@bp.route('/<path:path>') 
def index(path): 
    return render_template('index.html') 

問題是不匹配有效的API端點的請求都應該返回404,但考慮到包羅萬象的邏輯所有未登記API路線根本途徑渲染的模板。

有沒有一種確保無效API請求返回404的好方法?似乎沒有被排除在路由的方式包羅萬象的,所以我目前的解決方法是定義類似,

from werkzeug.routing import NotFound 

@api.resource('/<path:path>') 
class Endpoint(Resource): 
    def get(self, path): 
     raise NotFound() 

    def put(self, path): 
     raise NotFound() 

    def post(self, path): 
     ... 

這似乎有點冗長。

回答

1

好像簡單地覆蓋dispatch_request方法就足夠了。

@api.resource('/<path:path>') 
class Endpoint(Resource): 
    def dispatch_request(self, *args, **kwargs): 
     raise NotFound()