python—接口编写部分

最近准备整理一下之前学过的前端+小程序知识笔记,形成合集。顺便准备学一学接口部分,希望自己能成为一个全栈嘿嘿。建议关注收藏,持续更新技术文档。

目录

  • 前端知识技能树
    • http请求
    • 浏览器缓存
  • 后端知识技能树
    • python_api:flask+flask_restful
    • python_api:FastAPI+Tornado

前端知识技能树

http请求

GET和POST是HTTP请求的两种基本方法,

GETPOST
GET把参数包含在URL中POST通过request body传递参数
GET在浏览器回退时是无害的POST会再次提交请求
GET请求会被浏览器主动cachePOST不会,除非手动设置
GET产生的URL地址可以被BookmarkPOST不可以
GET请求只能进行url编码POST支持多种编码方式
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET请求参数会被完整保留在浏览器历史记录里POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的没有
对参数的数据类型,GET只接受ASCII字符没有限制
GET产生一个TCP数据;对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);POST产生两个TCP数据包;对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

HTTP有GET, POST, PUT, DELETE等等,HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP

(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url,超过的部分,恕不处理。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。但是:

  1. GET与POST都有自己的语义,不能随便混用。
  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

浏览器缓存

后端知识技能树

python_api:flask+flask_restful

在开始之前呢,我们需要安装几个模块,flask+flask_restful

get接口

# coding=utf-8
import sys
import importlib
importlib.reload(sys)
from flask import *
import flask_restful

app = Flask(__name__)
api = flask_restful.Api(app)


class HelloWorld(flask_restful.Resource):
    def get(self):
        x=request.args['x']#获取参数中的值
          y=request.args['y']
        return {'hello':y,'donghu':x}#接口返回值

api.add_resource(HelloWorld, '/login',methods=['GET'])#页面路径


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=80)#请求地址,以及端口

get接口编写完成,运行,然后在浏览器中输入http://127.0.0.1/login
能正常返回值,那就说明没有问题了。

post接口

# coding=utf-8
import sys
import importlib
importlib.reload(sys)
from flask import *
import flask_restful

app = Flask(__name__)
api = flask_restful.Api(app)

class HelloWorld(flask_restful.Resource):
    def post(self):
        x = request.form['x']#获取参数
        y=request.form['y']
        return {'hello':y,'donghu':x}

api.add_resource(HelloWorld, '/login2',methods=['POST'])

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=80)

post接口和get接口编写方式上差不多,只是接收参数的方式稍有调整。运行,然后在浏览器中输入,http://127.0.0.1/login2,看是否能正常访问。

python_api:FastAPI+Tornado

python提供了很多web框架,帮助我们快速构建API,如Flask、FastAPI、Tornado。
Flask、FastAPI如出一辙,所以这里只讲FastAPI+Tornado,如何构建GET和POST接口。

pip install fastapi
pip install uvicorn
pip install tornado

# -*- coding: utf-8 -*-
from fastapi import FastAPI
from pydantic import BaseModel 
import uvicorn
 
app = FastAPI()
class Item(BaseModel):
    a: int = None
    b: int = None
 
@app.get('/test/a={a}/b={b}')
def calculate(a: int=None, b: int=None):
    c = a + b
    res = {"res":c}
    return res

@app.post('/test')
def calculate(request_data: Item):
    a = request_data.a
    b = request_data.b
    c = a + b
    res = {"res":c}
    return res 
 
if __name__ == '__main__':
    uvicorn.run(app=app,
                host="localhost",
                port=8000,
                workers=1)

将上述代码保存为get.py,存储在某一路径
首先,进入python文件路径,在控制台启动服务
浏览器测试:访问http://localhost:8000/test/a=31/b=12
在这里插入图片描述

postman测试:
在这里插入图片描述
FastAPI的交互测试:访问http://localhost:8000/docs
在这里插入图片描述
Tornado比FastAPI更能承受高并发。

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado import gen
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor
import time
from tornado.options import define, options
from tornado.platform.asyncio import to_asyncio_future,AsyncIOMainLoop
from tornado.httpclient import AsyncHTTPClient
import asyncio

define("port", default=8000, help="just run", type=int)

class MainHandler(tornado.web.RequestHandler):
    def main(self,a,b):
        c = float(a) + float(b)
        res = {"res":c}
        return res
    
    # get接口     
    def get(self):
        a = self.get_body_argument('a')
        b = self.get_body_argument('b')
        res = self.main(a,b) # 主程序计算
        self.write(json.dumps(res,ensure_ascii=False))
    
    # post接口   
    def post(self):
        a = self.get_body_argument('a')
        b = self.get_body_argument('b')
        res = int(a) * int(b) #主程序计算
        self.write(json.dumps(res,ensure_ascii=False))
         
if __name__ == "__main__":
    #运行程序
    application = tornado.web.Application([(r"/test", MainHandler),])
    application.listen(8000,'localhost')
    tornado.ioloop.IOLoop.instance().start()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/484757.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebClient 同步、异步调用实现对比

文章目录 一、概述二、pom依赖三、代码结构四、源码传送1、异步代码2、同步代码3、完整代码 一、概述 WebClient是Spring WebFlux模块提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具,从Spring5.0开始WebClient作为RestTemplete的替代品,有…

Programming Abstractions in C阅读笔记:p331-p337

《Programming Abstractions in C》学习第79天,p331-p337,总计7页。 一、技术总结 /** File: stack.h* -------------* This interface defines an abstraction for stacks. In any* single application that uses this interface, the values in* the…

银行5G短消息应用架构设计

(一)RCS简介 1.1 RCS的提出与标准制定 RCS(Rich Communication Services & Suite,富媒体通信)是GSMA(Groupe Speciale Mobile Association,全球移动通信系统协会)在2008年提出的一种通讯方式,RCS融合了语音、消息…

Django(一)- 环境搭建和快速入门

一、搭建环境 1、创建Python虚拟环境 (base) C:\Users\35351>conda create -n django_study python3.9 2、安装Django (django_study) C:\Users\35351>pip install Django >> 查看安装版本 (django_study) C:\Users\35351>python -m django --version 3、安…

计算机毕业设计无从下手?学长带你从零开始,三天搞定!

嘿,各位朋友们,我是小新!👋 研究生的日子就像过山车一样,一转眼就快到终点站了。目前也是在面临着毕业论文的压力,好在前期付出的时间和努力比较多,现阶段只剩下一些小问题了,相对来…

n维数字图像欧氏距离变换算法

算法简介 该算法主要用于在三维图像中计算有效体素之间的最短欧几里得距离。 算法出处:NEW ALGORITHMS FOR EUCLIDEAN DISTANCE TRANSFORMATION OF AN n-DIMENSIONAL DIGITIZED PICTURE WITH APPLICATIONS 算法在体渲染加速中的应用:Accelerated Volum…

[Halcon学习笔记]在Qt上实现Halcon窗口的字体设置颜色设置等功能

1、 Halcon字体大小设置在Qt上的实现 在之前介绍过Halcon窗口显示文字字体的尺寸和样式,具体详细介绍可回看 (一)Halcon窗口界面上显示文字的字体尺寸、样式修改 当时介绍的设定方法 //Win下QString Font_win "-Arial-10-*-1-*-*-1-&q…

忘记密码找回流程请求拦截器-前端

目录 设置找回密码请求拦截器 1.相关参数 2.约定 代码实现 1. 实现思路 2. 实现代码 校园统一身份认证系统: 基于网络安全,找回密码、重新设置密码的流程和正常登录流程中密钥等请求头不一致。 设置找回密码请求拦截器 1.相关参数 clientId 应…

明日周刊-第3期

第3期,分享自己最近的感悟和实用工具。 文章目录 1. 一周热点2. 资源分享3. 言论4. 歌曲推荐 1. 一周热点 国内生产总值持续增长:统计局最新数据显示,2023年全年国内生产总值(GDP)超过126万亿元,比上年增长…

提升质量透明度,动力电池企业的数据驱动生产实践 | 数据要素 × 工业制造

系列导读 如《“数据要素”三年行动计划(2024—2026年)》指出,工业制造是“数据要素”的关键领域之一。如何发挥海量数据资源、丰富应用场景等多重优势,以数据流引领技术流、资金流、人才流、物资流,对于制造企业而言…

4 Spring IOC/DI配置管理第三方bean

文章目录 1,IOC/DI配置管理第三方bean1.1 案例:数据源对象管理1.1.1 环境准备1.1.2 思路分析1.1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.1.4 实现C3P0管理步骤1:导入C3P0的依赖步骤2:配置第…

DBO优化GRNN回归预测(matlab代码)

DBO-GRNN回归预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例…

博途建立S7-1200PLC与HMS AB7013Profinet通讯

1、新建一个博图项目1200PLC .CPU 1214C ACDC/RIY 6ES7 214-1BG31-0x80 2、安装GSD文件 Install general station description fle (GsD) GSDMLV2.3-HMS-ABC PROFINET GSD 3、连接PLC 4、在线访问 5、增加访问子网络 </

FPGA 以太网传输ov5640视频

1 实验任务 使用 DFZU4EV MPSoC 开发板及双目 OV5640 摄像头其中一个摄像头实现图像采集&#xff0c;并通过开发板上的以太网接口发送给上位机实时显示。 2 系统框架 时钟模块用于为 I2C 驱动模块、以太网顶层模块和开始传输控制模块提供驱动时钟&#xff1b;I2C 驱动模块…

用最小堆实现通用的高效定时器组件

用最小堆实现通用的高效定时器组件 文章目录 用最小堆实现通用的高效定时器组件开篇解决方案类图源码实现测试总结 开篇 在程序开发过程中&#xff0c;定时器会经常被使用到。而在Linux应用开发中&#xff0c;系统定时器资源有限&#xff0c;进程可创建的定时器数量会受到系统限…

Priority Queue实现栈和队列

在排序算法中&#xff0c;堆排序利用了完全二叉树形式的堆结构&#xff0c;结合了插入排序与合并排序的优点&#xff0c;能够以 O ( n log ⁡ n ) O(n\log{n}) O(nlogn)的时间完成排序。优先级队列是可基于堆结构进行实现的一种数据结构&#xff0c;在计算机系统中可以用来记录…

【现代C++】可变参数模板

现代C中的可变参数模板是C11引入的一个功能&#xff0c;允许模板接受可变数量的参数&#xff0c;使得模板编程更加灵活和强大。 1. 基本用法 可变参数模板允许您创建接受任意数量参数的函数或类模板。 template<typename... Args> void func(Args... args) {// 处理参…

C++ 基本运算

何谓运算符和操作数 基本运算 1、双目运算 2、单目运算 3、赋值表达式 表达形式&#xff1a; <变量><表达式>; 表达式是指各种运算符把常量、变量&#xff0c;函数等运算对象连接起来的具有实际意义并符合C语法规则的式子。赋值是指表达式的值赋给一个变量。 …

基于SSM的NEUQ宿舍管理系统的设计与实现

基于SSM的NEUQ宿舍管理系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全 获取源码——》公主号&#xff1a;计算机专业毕设大全

LabVIEW电动汽车直流充电桩监控系统

LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及&#xff0c;充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台&#xff0c;设计了一套电动汽车直流充电桩监控系统&#xff0c;能实时监测充电桩的温度、电压和电流&#xff0c;并进行数…