Представьте, что в моем API Flask-RESTful у меня есть два объекта: пользователи и города. Это отношения "один ко многим". Теперь, когда я создаю свой 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')
Как видите, я могу делать все, что хочу, чтобы реализовать самые простые функции. Я могу GET, POST, PUT и DELETE оба объекта. Однако у меня двоякая цель:
(1) Чтобы иметь возможность запрашивать с другими параметрами, такими как название города, а не просто идентификатор города. Это выглядело бы примерно так: api.add_resource(CityAPI, '/api/city/<string:name>', endpoint='city')
за исключением того, что это не выдало бы мне такую ошибку:
AssertionError: отображение функции просмотра перезаписывает существующую функцию конечной точки
(2) Чтобы иметь возможность объединить два ресурса в запросе. Скажем, я хотел связать всех пользователей с каким-то городом. В URL-адресах REST это должно выглядеть примерно так: /api/cities/<int:id>/users
Как мне это сделать с Flask? С какой конечной точкой мне его сопоставить?
По сути, я ищу способы превратить свой API из базового в полезный.