当前位置: 首页 > 知识库问答 >
问题:

如何制作一个简单的Python REST服务器和客户端?

令狐辉
2023-03-14

我正在尝试制作最简单的REST API服务器和客户端,服务器和客户端都用Python编写并在同一台计算机上运行。

来自本教程:

https://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask

我将此用于服务器:

# server.py

from flask import Flask, jsonify

app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

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

如果我从命令行运行此命令:

curl -i http://localhost:5000/todo/api/v1.0/tasks

我明白了:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 317
Server: Werkzeug/0.16.0 Python/3.6.9
Date: Thu, 05 Mar 2020 02:45:59 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol", 
      "done": false, 
      "id": 1, 
      "title": "Buy groceries"
    }, 
    {
      "description": "Need to find a good Python tutorial on the web", 
      "done": false, 
      "id": 2, 
      "title": "Learn Python"
    }
  ]
}

很好,现在我的问题是,如何使用请求来编写Python脚本以获得相同的信息?

我怀疑这是正确的想法:

# client.py

import requests

url = 'http://todo/api/v1.0/tasks'

response = requests.get(url,
                        # what goes here ??
                        )

print('response = ' + str(response))

然而,正如您从我的评论中看到的,我不确定如何设置请求的参数。获取

我试图使用此SO帖子:

使用python向RESTful API发出请求

然而,作为指导原则,不清楚如何根据消息更改调整格式。

可以简要描述如何设置参数以传递到requests.get并建议必要的更改以使上面的客户端示例正常工作吗?谢谢!

---编辑---

我还可以提到的是,我让客户端很容易地使用Postman工作,我只是不确定如何在Python中设置语法:

---编辑---

根据icedwater的以下回复,这是客户的完整工作代码:

# client.py

import requests
import json

url = 'http://localhost:5000/todo/api/v1.0/tasks'

response = requests.get(url)

print(str(response))
print('')
print(json.dumps(response.json(), indent=4))

结果:

<Response [200]>

{
    "tasks": [
        {
            "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
            "done": false,
            "id": 1,
            "title": "Buy groceries"
        },
        {
            "description": "Need to find a good Python tutorial on the web",
            "done": false,
            "id": 2,
            "title": "Learn Python"
        }
    ]
}

共有1个答案

鲁财
2023-03-14

从帮助(requests.get):

Help on function get in module requests.api:

get(url, params=None, **kwargs)
    Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response

所以我要说的是请求。get(url)足以获得响应。然后根据API预期返回的内容,查看响应中的json()或data()函数。

因此,对于JSON响应,以下代码应该足够了:

import requests
import json

url = "https://postman-echo.com/get?testprop=testval"
response = requests.get(url)
print(json.dumps(response.json(), indent=4))

使用实际的测试API尝试上述代码。

 类似资料:
  • 本文向大家介绍Rust 一个简单的TCP客户端和服务器应用程序:echo,包括了Rust 一个简单的TCP客户端和服务器应用程序:echo的使用技巧和注意事项,需要的朋友参考一下 示例 以下代码基于std :: net :: TcpListener上的文档提供的示例。该服务器应用程序将侦听传入的请求并发送回所有传入的数据,从而充当“回显”服务器。客户端应用程序将发送一条小消息,并期望包含相同内容的

  • 问题内容: 如何制作一个简单的Python回显服务器,该服务器可以记住客户端并且不为每个请求创建新的套接字?必须能够支持并发访问。我希望能够连接一次并使用此客户端或类似客户端连续发送和接收数据: 即使用上面的客户端,服务器在端口50000上运行,我希望能够做到这一点: 问题答案: 您可以为每个客户端使用一个线程以避免阻塞,然后仅将主线程用于侦听新客户端。当一个连接时,主线程创建一个新线程,该新线程

  • 本文向大家介绍详解如何用python实现一个简单下载器的服务端和客户端,包括了详解如何用python实现一个简单下载器的服务端和客户端的使用技巧和注意事项,需要的朋友参考一下 话不多说,先看代码: 客户端: 服务器: 前几天有写一个基于UDP的简单程序,今天学习了TCP,TCP与UDP 的区别与联系其实已经写得很清楚了,这里不再多说。今天使用的TCP,在文件下载方面应用更加广泛(可靠)。客户端分析

  • 本文向大家介绍Nodejs实现的一个简单udp广播服务器、客户端,包括了Nodejs实现的一个简单udp广播服务器、客户端的使用技巧和注意事项,需要的朋友参考一下 nodejs发送udp广播还是蛮简单的,我们先写个服务器用于接收广播数据,代码如下: 然后写个客户端程序,发送广播消息,代码如下: 这里需要注意的是socket.setBroadcast(true);必须在绑定socket成功后才能调用

  • 问题内容: 我正在尝试编写一个简单的Java http客户端,该客户端仅打印出服务器响应的一行。我的问题是服务器没有响应。这是我所拥有的,正在编译并且没有明显错误地运行,只是在键入主机名(例如“ www.google.com”)后挂起: 有什么建议?请注意,这假设存在一个“ index.html”-即使为true,它仍会挂起。 问题答案: 我认为我可以通过对代码进行少量更改来重现该问题,因此现在它

  • Http是一个比tcp更高级的协议,它描述了客户端浏览器如何与网页服务器进行通信。Go有自己的net/http包,我们来看看它。我们从一些简单的示例开始, 首先编写一个“Hello world!”:查看示例15.6 我们引入了http包并启动了网页服务器,和15.1的net.Listen("tcp", "localhost:50000")函数的tcp服务器是类似的,使用http.ListenAnd