HTML,API,RestFul API基础
一文搞懂RESTful API - bigsai - 博客园
1. API 路径 开头必须 /
,表示绝对路径,不支持 .
或 ..
(相对路径)。API 结尾 /
通常不需要,但部分框架会自动处理 /
→ 无 /
。
✅ 推荐
GET /api/v1/products # 资源集合
GET /api/v1/products/123 # 具体资源
🚫 避免
GET ./api/v1/products # ❌ API 不能用 `.` 开头
GET /api/v1/products/ # ❌ 可能导致 404
2. 系统路径 Linux/Windows 支持 .
开头(相对路径)。结尾 /
代表目录,不加 /
可能是文件。
/home/user/docs/ # 目录
/home/user/docs.txt # 文件
3. 关键区别
特性 | API 路径 | 系统路径 |
---|---|---|
相对路径 | ❌ 不支持 . | ✅ ./file.txt 代表当前目录 |
绝对路径 | ✅ /api/v1/users | ✅ /home/user/docs/ |
结尾 / | 🚫 通常不加 | ✅ 代表目录 |
✅ 最佳实践 API 必须 /
开头,通常不加结尾 /
。文件路径 目录加 /
,文件不加 /
。
Swagger 提供了一套完整的工具集,用于设计、构建、文档化和测试 RESTful API。其核心组件包括 Swagger Codegen 和 Swagger UI。Swagger Codegen 生成的是代码框架(客户端 SDK 或服务端模板),需要开发者补充逻辑才能运行。Swagger UI 生成的是交互式文档网页,用于展示和测试 API,不涉及代码生成。
1. Swagger Codegen 的作用与效果
功能:根据 OpenAPI 规范(YAML/JSON 格式的 API 描述文件),自动生成客户端 SDK(如 Java、Python 的调用库)和服务器端框架代码(如 Spring Boot、Flask 的接口实现模板)。
生成内容:
- 代码文件:例如生成 Java 的模型类、接口定义、HTTP 请求工具类,或 Python 的 Flask 路由代码等。这些文件需要开发者进一步补充业务逻辑才能运行。
- 支持框架:生成的代码适配多种框架(如 Spring Boot、Django、Express),但并非“完整的应用程序”,而是提供基础代码框架,开发者需自行完善。
使用场景:假设你有一个 OpenAPI 文件,通过 Swagger Codegen 可以快速生成客户端调用库(供其他服务使用你的 API)或服务端接口模板(简化开发流程)。
2. Swagger UI 的作用与效果
功能:将 OpenAPI 规范文件转换为交互式文档网页,允许用户直接在浏览器中查看 API 端点、参数说明,并实时发送请求测试接口。
生成内容:
-
可视化界面:以 HTML/CSS/JS 渲染的网页,展示 API 的路径、请求方法、参数、响应示例等。用户可填写参数并点击“Try it out”测试接口。
-
实时反馈:显示请求的响应结果(如 JSON 数据)、状态码及错误信息,帮助开发者和测试人员快速验证 API 功能。
使用场景:在开发阶段,后端团队通过 Swagger UI 提供文档给前端或测试团队,减少沟通成本;部署后,作为 API 的官方文档供外部调用者参考。
3. OpenAPI 规范文件的实际形态
文件格式:通常是 YAML 或 JSON 文件,例如 openapi.yaml
或 swagger.json
,定义了 API 的元数据(如标题、版本)、端点路径、请求方法、参数类型、响应格式及错误码等。例如:
openapi: 3.0.0
info:title: 示例APIversion: 1.0.0
paths:/users:get:summary: 获取用户列表parameters:- name: limitin: queryschema:type: integerresponses:'200':description: 成功返回用户列表
Swagger UI 的界面示例
访问方式:启动服务后,通过 URL(如 http://localhost:8080/swagger-ui.html
)打开页面。
界面元素:API 列表:左侧展示所有接口路径(如 /users
、/orders
)。参数输入框:支持填写路径参数、查询参数、请求体(JSON 格式)。测试按钮:点击“Try it out”发送请求,页面下方显示服务器响应结果。示例值:自动生成请求和响应的示例数据,帮助理解接口用法。
4. RESTful API 框架分类
Java 生态:Spring Boot:最流行的 Java 框架,内置 Tomcat,支持快速构建 REST API。JAX-RS:Java 标准(如 Jersey、RESTEasy),基于注解开发。
Python 生态:Django REST Framework:基于 Django,适合复杂业务和权限控制。Flask:轻量级,通过扩展(如 Flask-RESTful)支持 REST。FastAPI:高性能,支持异步和自动生成 Swagger 文档。
5. 跨语言项目的可行性
可以同时使用 Java 和 Python 框架,但需要通过 API 通信或消息队列解耦。例如:Java 主系统:处理核心业务(如医院管理系统的患者数据)Python 子服务:调用 LLM(如 GPT-3)生成 SQL,通过 HTTP API 返回结果给 Java 系统。
技术实现:Java 后端调用 Python 服务的 API(如 FastAPI 暴露的 /generate-sql
端点)。数据格式统一(如 JSON),确保跨语言解析兼容。使用 API 网关(如 Spring Cloud Gateway)统一管理请求路由。
FastAPI、Postman、Flask 的关系
- FastAPI 和 Flask:两者都是 Python 的 Web 框架,用于构建 API。FastAPI 的性能优于 Flask,适合大规模并发应用。Flask 适合简单的 Web 应用。
- FastAPI:基于 ASGI(异步服务器网关接口),支持异步编程和高性能,内置数据验证(Pydantic)、自动文档生成(Swagger/ReDoc)。Flask:基于 WSGI(同步接口),轻量级但需手动处理数据验证和文档生成。
- 兼容性:FastAPI 与异步数据库(如 asyncpg)更适配,Flask 适合搭配传统同步库(如 SQLAlchemy)。
- Postman:独立于框架的 API 测试工具,用于调试和验证 FastAPI/Flask 开发的接口。
示例代码(FastAPI vs Flask)
# FastAPI 示例(异步)
from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: int):return {"item_id": item_id}# 运行: uvicorn filename:app --reload
# Flask 示例(同步)
from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/items/<int:item_id>', methods=['GET'])
def get_item(item_id):return jsonify({"item_id": item_id})# 运行: python filename.py
if __name__ == '__main__':app.run(debug=True)
RESTful API 里没有方法定义,我如何判断它是增删改查?
RESTful API 通过 HTTP 方法 来区分操作,而不是通过 URL。例如:
方法 | 作用 | 示例 URL |
---|---|---|
GET | 获取数据 |
|
POST | 创建数据 |
|
PUT | 更新数据 |
|
DELETE | 删除数据 |
|
如果 URL 里没有明确的增删改查,通常需要看 HTTP 方法(GET、POST、PUT、DELETE)来判断它的作用。
API 是不是就等于链接?
不完全正确。API(应用程序接口)可以包含但不等同于 URL,API 指的是一组规则和协议,不仅限于 HTTP,还可以是数据库 API、操作系统 API、函数库 API 等。API ≠ 网址,但 Web API 确实会以 URL 的形式暴露出来。
Web API:
GET https://api.example.com/users/1数据库 API(Java 代码):
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");操作系统 API(调用 Windows API):
#include <windows.h>
MessageBox(0, "Hello", "Message Box", MB_OK);
GraphQL与数据库查询的区别:
- GraphQL:客户端自定义返回字段(如
{ user { id, name } }
),返回 JSON 格式数据。ORM(如 Hibernate) :将数据库表映射为 Java 对象,执行固定查询。 - 定位:GraphQL 位于 API 层(替代 REST),ORM 位于持久层(数据库操作)。
GraphQL兼容性:既可以用 Spring Boot(Java) 也可以用 Flask/FastAPI(Python) 实现。它是一个独立的 API 查询语言。
@RestController
public class GraphQLController {@PostMapping("/graphql")public String executeGraphQL(@RequestBody String query) {return "GraphQL Response";}
}
import grapheneclass Query(graphene.ObjectType):hello = graphene.String()def resolve_hello(root, info):return "Hello, World!"schema = graphene.Schema(query=Query)
- FastAPI:兼容异步库(如
asyncpg
),不兼容同步阻塞代码。 - Flask:兼容传统同步库(如
SQLAlchemy
)。 - Spring Boot:兼容主流数据库(MySQL、PostgreSQL)和 ORM(JPA/Hibernate)。
- GraphQL:可与任何后端语言和数据库配合使用。
相关文章:
HTML,API,RestFul API基础
一文搞懂RESTful API - bigsai - 博客园 1. API 路径 开头必须 /,表示绝对路径,不支持 . 或 ..(相对路径)。API 结尾 / 通常不需要,但部分框架会自动处理 / → 无 /。 ✅ 推荐 GET /api/v1/products # 资源集合…...
js 使用缓存判断在规定时间内显示一次弹框
js 使用缓存判断在规定时间内显示一次弹框 功能拆分,新用户注册完成登录跳转首页 , js根据注册时间判断显示一个新手指引的弹窗,只在注册当天登录且显示一次 <script>jQuery(document).ready(function($) {getWinnerModalShow()});// 新…...

使用新版本golang项目中goyacc依赖问题的处理
背景 最近项目使用中有用到go mod 和 goyacc工具。goyacc涉及到编译原理的词法分析,文法分析等功能,可以用来生成基于golang的语法分析文件。本期是记录一个使用中遇到的依赖相关的问题。因为用到goyacc,需要生成goyacc的可执行文件。 而项目…...
洛谷 P2574 XOR的艺术/CF242E XOR on Segment 题解
1.XOR的艺术 题意 给定一个长度为 n n n的、只含有数字 0 , 1 0,1 0,1的字符串和两种操作。 对于每种操作,给定 o p , l , r op,l,r op,l,r: o p 0 op0 op0表示将字符串的 [ l , r ] [l, r] [l,r]区间内的 0 0 0变成 1 1 1, 1 1 1变成 0 …...
包管理器-汇总介绍
包管理器是一种在操作系统或软件开发环境中用于自动化软件包(程序、库等)的安装、升级、配置和卸载等操作的工具。它能帮助用户更方便地管理软件及其依赖关系,以下是不同操作系统和开发环境中常见的包管理器介绍: 操作系统层面的…...

mysql系列8—Innodb的undolog
背景 本文涉及的内容较为底层,做了解即可,是以前学习《高性能mysql》和《mysql是怎样运行的》的笔记整理所得。 undolog设计的初始目的是保证事务的原子性。mysql的修改操作发生后,如果所在的事务未被提交,如mysql服务或者操作系统…...

静默安装OGG for MySQL微服务版本,高效开展数据同步和迁移
一、背景 本文从Oracle GoldenGate微服务版的概念和组件介绍开始,从零介绍了怎么开始安装GoldenGate 21c for Oracle微服务版本的软件及部署。当然了,微服务版除新功能外包含传统版所有的功能。 二、安装部署 (一)下载OGG for …...

【Golang 面试题】每日 3 题(五十五)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
PHP关键字入门指南:分类与功能全解析
如果你是刚接触PHP的新手,可能会对代码中那些“特殊单词”感到困惑。别担心!本文将用最通俗易懂的方式,带你认识PHP中的关键字——它们就像编程世界的“魔法咒语”,每个都有独特的作用。文末还附有代码示例,帮你快速上手! 一、什么是PHP关键字? PHP关键字是语言内置的特…...

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心
在现代分布式系统和微服务架构的构建中,消息中间件作为一个不可或缺的组件,承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时,如何选择合适的消息中间件成为了开发者和架构师们…...

【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题
Linux to go制作流程 0.写在前面 关于教程Why Linux to go?实际效果 1.准备工具2.制作步骤 下载系统镜像硬盘分区准备启动U盘安装系统重启完成驱动安装将系统启动引导程序迁移到移动硬盘上 3.可能出现的问题 3.1.U盘引导系统安装时出现崩溃3.2.不影响硬盘里本身已有…...

HCIA项目实践---OSPF的基本配置
9.5.12 OSPF的基本配置 (所搭环境如上图所示) A 先配置IP地址 (先进入路由器R1的0/0/0接口配置IP地址,再进入环回接口配置IP地址) (配置R2路由器的0/0/0和0/0/1以及环回接口的IP地址) (置R3路由器的0/0/0接…...
Vue 自动配置表单 el-switch等不常用组件覆盖默认值问题
有自动解析表单的vue组件如下,其原理是调用一个配置表单定义的接口,然后再调用获取表单配置的接口并将配置的数据覆盖表单的默认值。其中el-switch的配置值没有覆盖默认值,分析其原因。 主页面如下: <template> <div cla…...

零基础购买阿里云服务器,XShell连接云服务器
目录 1.环境搭建方式 2. 使用云服务器 3.使用终端软件登录到Linux 4.使用XShell登录主机 5.连接失败的原因: 下一篇更新:Linux的基础指令以及如何Linux的环境搭建 1.环境搭建方式 主要有四种: 1.直接安装在物理机上,虽然Linux有图形化…...

【系统架构设计师】虚拟机体系结构风格
目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性。3.虚拟机体…...

C语言中qsort函数使用技巧
在C语言的标准库中, qsort 函数是一个强大的通用排序函数,它采用快速排序算法,能够高效地对各种数据类型的数组进行排序。掌握 qsort 函数的使用技巧,对于提升程序的效率和代码的简洁性至关重要。 一、qsort函数基本介绍 qsort 函…...

WPF的Prism框架的使用
安装Prism.DryIoc库: Prism的区域和模块化: 一个区域可以显示一个用户控件 一个模块就是一个项目,也就是一个类库 动态切换用户控件的案例: <Grid><Grid.RowDefinitions><RowDefinition Height"auto"…...

LeetCode每日精进:142.环形链表II
题目链接:142.环形链表II 题目描述: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环…...

CPP集群聊天服务器开发实践(五):nginx负载均衡配置
1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天,为了提升并发量最直观的办法需要水平扩展服务器的数量,三台服务器可以容纳六万左右的客户端。 负载均衡器的作用: 把client的请求按照负载均衡算法分发到具体…...
easyexcel解析excel文件的时候报错
easyexcel解析xls文件的时候,报错Exception in thread "main" com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/objectweb/asm/Type at com.alibaba.excel.analysis.ExcelAnalyserImpl.analysis(ExcelAnalyser…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...