#python-3.x #api #rest #flask-restful
#python-3.x #API #rest #flask-restful
Вопрос:
У меня, как у новичка, только что изучающего flask, есть несколько вопросов.
class Users(Resource):
decorators = [...,]
def get(self, user_id):
"""
GET /users : all uesers
GET /users/1 : user where user_id = 1
"""
# do query user by user_id
В реальном бизнесе редко запрашиваются пользователи на основе только одного измерения, вместо этого в большинстве случаев нам нужно запрашивать пользователей на основе нескольких измерений, таких как
- запрашивать пользователей по имени
- запрашивать пользователей по адресу электронной почты
- запрашивайте пользователей по имени и create_time
- Еще…
Мои вопросы:
Q1: насколько я знаю, в классе ресурсов flask-restful существует только метод on get, как поддерживать так много пользовательских функций запроса в одном методе get? многие из них похожи на это,
def get(user_id=None, user_email=None, user_create_time=None, user_name=None):
if user_id is None and user_email is None and user_create_time is None and user_name:
query_user_by_name
elif user_id is None and user_email and user_create_time is None and user_name is None:
query_user_by_email
...
О … ХО …, это вонючий и длинный, действительно катастрофа!
Q2: Я также думаю, что использовать другой ресурс, например:
class UserNameResource(Resource):
def get(user_name):
query_user_by_name
class UserNameAndCreateTimeResource(Resource):
def get(user_name, create_time):
query_user_by_name_and create_time
...
Это также длинный, уродливый и не соответствует правилам именования restful, это мой второй вопрос.
Q3: используйте post methon вместо get, потому что restful не ограничен использованием метода POST для запроса ресурса. Если это нормально, то возникает мой третий вопрос: как отличить «создать ресурс» от «запросить ресурс» в методе post? Может быть, с моим ограниченным пониманием, вот так?
class Users(Resource):
def post(_method, **kwargs):
if _method == 'QUERY': # just a flag, could be others, as long as it's agreed in advance
# query_resource, then query user by diffenent conditions
if query_string in kwargs:
# query_sring is a dict, could used to ORM query,
# so there is only one method for query users resouce,
# there is no more other query_users_funcs like
# query_user_by_name, query_user_id,
# query_user_by_name_and_email ...
query_user_by_query_string
if _method == 'CREATE':
create_resource
Я новичок в flask и restful. Выше приведены мои запутанные проблемы и мои собственные мысли, которые могут быть очень незрелыми.
Добро пожаловать, чтобы обсудить и направить меня. Большое вам спасибо.
Комментарии:
1. Я рекомендую задавать ваши три вопроса как три отдельных вопроса.
2. @LajosArpad Спасибо, братан. На самом деле, это одна проблема. Я рассмотрел только три незрелых решения этой проблемы. Тем не менее, я думаю, что каждое решение не очень хорошее, поэтому здесь возникает 3 вопроса. Ожидайте, что кто-то может предложить идеальное решение, тогда этих трех проблем не существует.