如何从PyCharm调试WebAPI?

什么是JSON

到目前为止,已经执行了将html返回请求的过程。HTML通常被设计为在浏览器上显示并由人类操纵。因此,HTML可以与WebAPI一起使用,但是在程序中使用它通常很麻烦且效率低下。因此,许多1是的WebAPI JSON(JavaScript对象符号)被很好地利用的格式。JSON的确切格式在RFC 8259中定义。基本上,将Python理解为数值和字符串,布尔值(真,假),可以包含null的列表以及字典是很好的。写作风格几乎相同。以下是json的示例。

{
“ id”:3,
“ name”:“ hoge”,
“ ref”:[1、2、4],
}

在此示例中,将数组[1、2、3]分配给数值3,使用id作为键,使用字符串hoge,并使用“ ref”作为名称。

http请求返回JSON

要从Flask返回上述json,请执行以下操作。

from flask import Flask, jsonify

app = Flask(__name__)

app.config['JSON_AS_ASCII'] = False

books = [{'name': 'EffectivePython', 'price': 3315}, {'name': 'Expert Python Programming', 'price': 3960}]

@app.route('/')
def get_json():
    data = {
        "id": 3,
        "name": "hoge",
        "ref": [1, 2, 4],
    }
    return jsonify(data)
if __name__ == '__main__':
    app.run()

综上,可以使用普通的Python字典和列表来表示JSON,然后使用jsonify函数将其转换为JSON。

如何从PyCharm调试WebAPI

到目前为止,我从浏览器检查了网页并进行了调试。但是,在调试WebAPI时,可以从PyCharm进行调试更加方便。到目前为止,尤其是对于POST,已经使用了表单,但是WebAPI很难通过浏览器进行操作,因为POST是直接执行的。PyCharm(专业版)具有一个功能(HTTP客户端),可在PyCharm上创建并发送HTTP请求。功能介绍。除PyCharm之外的其他IDE可能会这样做。另一种选择是使用称为cURL的工具。如果您使用的不是PyCharm,请检查一下。

PyCharm的HTTP客户端提供两种方法:一种用于发送临时HTTP请求,另一种用于将HTTP请求保存到文件并发送。在本文中,我将向您展示如何将可重用的HTTP请求保存到文件中。

首先,从文件菜单中选择“新建”,然后单击“ HTTP请求”(见下文)。

然后将要求您输入文件名,因此输入适当的名称(或使用get_test)。

如何从PyCharm调试WebAPI?_第1张图片
由于这次发送了GET请求,因此请从右上方的“ Add Request”中选择“ GET Request”(请参见下图)。
如何从PyCharm调试WebAPI?_第2张图片
使用PyCharm的HTTPClient独有的符号编写多个HTTP请求时,显示请求分隔符。您可以写很多,但这是最低要求。其他功能基本上遵循HTTP标头的语法。我要你调查。

接下来,让我们实际发送此请求。首先,执行示例程序。之后,您可以通过返回到HTTPClient并在编辑器中单击GET左侧的绿色▶(下方)来发送请求。
如何从PyCharm调试WebAPI?_第3张图片

在POST请求中接收JSON

至此,前面已经完成了响应GET请求发送回JSON的过程。接下来,我将介绍接收POST请求和其中包含的json的过程。

主程序(app.py)如下。

from flask import Flask, request, jsonify

app = Flask(__name__)

# 日本語を使えるように
app.config['JSON_AS_ASCII'] = False

books = [{'name': 'EffectivePython', 'price': 3315}, {'name': 'Expert Python Programming', 'price': 3960}]


@app.route('/books', methods=['POST'])
def post_json():
    # JSONを受け取る
    json = request.get_json()

    # JSONをパースする
    name = json['name']
    price = json['price']
    book = {'name': name, 'price': price}
    book_id = len(books)
    books.append(book)

    # 返却用ディクショナリを構築
    book['id'] = book_id
    return jsonify(book)  # JSONをレスポンス


@app.route('/books/', methods=['GET'])
def get_json_from_dictionary(book_id):
    return jsonify(books[int(book_id)])


if __name__ == '__main__':
    app.run()

一个示例请求如下。

POST http://localhost:5000/books
Content-Type: application/json

{
  "name": "hoge",
  "price": 1000
}

###

GET http://localhost:5000/books/2
Content-Type: application/json

###

收到POST请求后,您可以使用get_json将JSON转换为Python对象,如下所示。

request.get_json()

由get_json转换的对象可以像Python字典和列表一样进行处理(请参见下文)。

   name = json['name']
   price = json['price']

此外,您可以使用迄今尚未解释的相同名称定义URL,但使用不同的HTTP方法(此处为GET和POST)。WebAPI(尤其是那些称为REST API的API)通常会这样做。这具有在GET的情况下显式获取并在POST的情况下进行传输的含义。

你可能感兴趣的:(Flask)