【问题标题】:creating a REST API without Flask in python在 python 中创建一个没有 Flask 的 REST API
【发布时间】:2018-09-20 05:46:36
【问题描述】:

我想在不使用 Flask 的情况下创建 REST API。我已经使用 Flask 创建了一次,如下所示,但现在我想尝试不使用 Flask。我开始知道 urllib 是执行此操作的软件包之一,但不知道该怎么做。即使有 urllib 以外的其他方法,那也没关系。

from werkzeug.wrappers import Request, Response
import json
from flask import Flask, request, jsonify
app = Flask(__name__)

with open ("jsonfile.json") as f:
    data = json.load(f)
    #data=f.read()

@app.route('/', methods=['GET', 'POST'])
def hello():
    return jsonify(data)

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 9000, app)

【问题讨论】:

  • 你有什么问题?
  • 我想创建 REST api 来发送我的 JSON 数据。我已经使用 Flask 完成了它,但现在我想在没有 Flask 的情况下完成它,所以我想知道如何在不使用 Flask 的情况下完成它?我开始知道通过 urllib 是可能的,但我不知道该怎么做
  • 如果有什么不清楚的地方请告诉我!谢谢!
  • 请问您是否有特定原因不想/不能使用烧瓶?在没有烧瓶或 werkzeug 的情况下手动执行此操作将非常复杂且耗时,它们已经为您介绍了很多内容。此外,您的代码不符合最佳实践或烧瓶文档,如果您遇到问题,我会在完全注销框架之前对其进行更多研究。
  • 我的其他队友对 Flask 不太满意。我们已经使用http客户端做响应客户端,现在想在没有flask的情况下做请求服务器。

标签: json python-3.x rest flask urllib


【解决方案1】:

你可以试试这样的

import json
import http.server
import socketserver
from typing import Tuple
from http import HTTPStatus


class Handler(http.server.SimpleHTTPRequestHandler):

    def __init__(self, request: bytes, client_address: Tuple[str, int], server: socketserver.BaseServer):
        super().__init__(request, client_address, server)

    @property
    def api_response(self):
        return json.dumps({"message": "Hello world"}).encode()

    def do_GET(self):
        if self.path == '/':
            self.send_response(HTTPStatus.OK)
            self.send_header("Content-Type", "application/json")
            self.end_headers()
            self.wfile.write(bytes(self.api_response))


if __name__ == "__main__":
    PORT = 8000
    # Create an object of the above class
    my_server = socketserver.TCPServer(("0.0.0.0", PORT), Handler)
    # Star the server
    print(f"Server started at {PORT}")
    my_server.serve_forever()

然后像这样测试

→ curl http://localhost:8000
{"message": "Hello world"}%

但请记住,此代码不稳定,只是示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多