Ответ 1
Прежде чем ответить на ваш вопрос:
Параметры в URL (например, key=listOfUsers/user1
) являются параметрами GET
и вы не должны использовать их для запросов POST
. Краткое объяснение разницы между GET и POST можно найти здесь.
В вашем случае, чтобы использовать принципы REST, вы, вероятно, должны иметь:
http://ip:5000/users
http://ip:5000/users/<user_id>
Затем на каждом URL вы можете определить поведение различных методов HTTP (GET
, POST
, PUT
, DELETE
). Например, в /users/<user_id>
вы хотите следующее:
GET /users/<user_id> - return the information for <user_id>
POST /users/<user_id> - modify/update the information for <user_id> by providing the data
PUT - I will omit this for now as it is similar enough to 'POST' at this level of depth
DELETE /users/<user_id> - delete user with ID <user_id>
Итак, в вашем примере вы хотите сделать POST
для /users/user_1
с данными POST "John"
. Тогда выражение XPath или любой другой способ доступа к вашим данным должен быть скрыт от пользователя и не привязываться к URL-адресу. Таким образом, если вы решите изменить способ хранения и доступа к данным, а не все изменения URL, вам просто придется изменить код на стороне сервера.
Теперь ответ на ваш вопрос: ниже приведен основной полупсевдокод того, как вы можете достичь того, что я упомянул выше:
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/users/<user_id>', methods = ['GET', 'POST', 'DELETE'])
def user(user_id):
if request.method == 'GET':
"""return the information for <user_id>"""
.
.
.
if request.method == 'POST':
"""modify/update the information for <user_id>"""
# you can use <user_id>, which is a str but could
# changed to be int or whatever you want, along
# with your lxml knowledge to make the required
# changes
data = request.form # a multidict containing POST data
.
.
.
if request.method == 'DELETE':
"""delete user with ID <user_id>"""
.
.
.
else:
# POST Error 405 Method Not Allowed
.
.
.
Есть много других вещей, которые следует учитывать, например, тип содержимого запроса POST
но я думаю, что то, что я сказал до сих пор, должно быть разумной отправной точкой. Я знаю, что не ответил прямо на вопрос, который вы задавали, но я надеюсь, что это поможет вам. Я сделаю некоторые изменения/дополнения позже, а также.
Спасибо, и я надеюсь, что это полезно. Пожалуйста, дайте мне знать, если я что-то не так понял.