Представьте, что в моем Flask-RESTful API есть два объекта: пользователи и города. Это отношения один ко многим. Теперь, когда я создаю свой API и добавляю к нему ресурсы, все, что я могу сделать, это сопоставить очень простые и общие URL-адреса с ними. Вот код (без ненужных вещей):
class UserAPI(Resource): # The API class that handles a single user
def __init__(self):
# Initialize
def get(self, id):
# GET requests
def put(self, id):
# PUT requests
def delete(self, id):
# DELETE requests
class UserListAPI(Resource): # The API class that handles the whole group of Users
def __init__(self):
def get(self):
def post(self):
api.add_resource(UserAPI, '/api/user/<int:id>', endpoint='user')
api.add_resource(UserListAPI, '/api/users/', endpoint='users')
class CityAPI(Resource):
def __init__(self):
def get(self, id):
def put(self, id):
def delete(self, id):
class CityListAPI(Resource):
def __init__(self):
def get(self):
def post(self):
api.add_resource(CityListAPI, '/api/cities/', endpoint='cities')
api.add_resource(CityAPI, '/api/city/<int:id>', endpoint='city')
Как видите, я могу делать все, что хочу, чтобы реализовать самые базовые функции. Я могу получить, опубликовать, положить и удалить оба объекта. Однако моя цель двоякая:
(1) Чтобы иметь возможность запрашивать с другими параметрами, такими как название города, а не просто идентификатор города. Это будет выглядеть примерно так: api.add_resource(CityAPI, '/api/city/<string:name>', endpoint='city')
за исключением того, что это не выдало бы мне эту ошибку:
AssertionError: отображение функции представления перезаписывает существующую функцию конечной точки
(2) Чтобы можно было объединить два ресурса в запросе. Скажем, я хотел, чтобы все пользователи были связаны с каким-то городом. В URL-адресах REST это должно выглядеть примерно так: /api/cities/<int:id>/users
Как мне это сделать с Flask? Какую конечную точку мне сопоставить?
По сути, я ищу способы перенести мой API из базового в удобный для использования. Спасибо за любые идеи/советы