ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Posting:在终端里打造现代 API 客户端的完整指南

Posting:在终端里打造现代 API 客户端的完整指南 Posting在终端里打造现代 API 客户端的完整指南【免费下载链接】postingThe modern API client that lives in your terminal.项目地址: https://gitcode.com/gh_mirrors/po/postingPosting 是一款运行在终端TUI中的现代 HTTP 客户端定位与 Postman、Insomnia 类似但强调键盘驱动、可经由 SSH 使用并以纯文本 YAML 文件持久化全部请求。本文基于仓库 README.md 为主线结合 CLI 入口、配置实现 与示例请求文件等源码证据系统讲解 Posting 的核心特性、安装方式、命令行用法、配置体系与开发测试流程帮助你在读完本文后即可上手日常 API 调试。Posting 是什么Posting 的自我定位是一句简短而明确的话“一个强大的、住在你终端里的 HTTP 客户端”A powerful HTTP client that lives in your terminal。它并非又一个命令行版的curl封装而是与 Postman、Insomnia 同类的完整 HTTP 客户端只是把界面搬进了终端。因此它天然具备 TUI 应用的三大优势可远程使用在服务器上、通过 SSH 会话中即可完成请求调试无需图形界面键盘高效所有主要操作都可以不离开键盘完成支持 Vim 键位与可自定义快捷键存储透明请求保存在本地的简单 YAML 文件中人类可读、易于 diff可以直接纳入 Git 版本管理随项目一起共享。从仓库元数据看当前版本为 2.9.2见 pyproject.toml项目使用 Python 3.11基于 Textual 构建命令行入口定义为posting posting.__main__:cli。请求以 YAML 文件存储可版本化的 API 资产Posting 与其他 HTTP 客户端最本质的区别在于请求的存储方式一个请求就是一个.posting.yaml文件保存在集合collection目录中。以仓库自带的示例 tests/sample-collections/echo.posting.yaml 为例请求文件的核心结构如下name: echo description: This is an echo server we can use to see exactly what request is being sent. url: https://postman-echo.com/get body: form_data: - name: something value: 123 headers: - name: X-Setup-Var value: $setup_var scripts: setup: scripts/my_script.py on_request: scripts/my_script.py on_response: scripts/my_script.py options: follow_redirects: false可以看到一个请求文件由name、description、url、body、headers、scripts、options等字段构成headers中的值支持$变量名语法配合环境变量体系自动解析scripts支持setup、on_request、on_response三个阶段的 Python 脚本与 README 中“请求前后运行 Python 代码”的特性对应options可控制如follow_redirects等请求行为。这种纯文本存储方式的直接收益是请求描述本身就是代码审查的对象。团队成员可以通过 diff 清楚地看到某个接口请求的改动历史这与 Postman 中二进制/JSON 大文件的协作体验完全不同。仓库的tests/sample-collections/目录下还有大量示例请求覆盖 GET/POST/DELETE/PUT、路径参数、查询参数等场景可作为编写自定义请求文件的模板参考。核心特性全景README 列出了 Posting 的主要特性这些特性在源码中均有对应实现模块见 src/posting 目录结构下面逐一展开特性说明源码佐证Jump mode 导航按CtrlO进入“跳跃模式”再按字母即可跳转到界面任意区域避免多次按 Tabjump_overlay.py、jumper.py环境 / 变量支持.env文件与宿主环境变量可在请求中引用variables.py、env_file_dialog自动补全URL、请求头等输入框提供历史自动补全suggesters.py、variable_autocomplete.pytree-sitter 语法高亮使用 Textual 内置的 tree-sitter 语法高亮解析 JSON 等响应内容highlighters.pyVim 键位响应区、输入区支持hjkl移动、v视觉模式、%跳转匹配括号等响应区实现见 response_area.py可自定义快捷键通过 Keymap 配置重映射所有快捷键详见 docs/guide/keymap.md用户自定义主题使用 YAML 定义主题文件存放于主题目录themes.py示例见 tests/sample-themes请求前后运行 Python每个请求可在 setup / on_request / on_response 阶段执行 Python 脚本scripts.py示例脚本 tests/sample-collections/scripts/my_script.py深度可配置配置文件、环境变量、.env文件三级配置体系详见下文“配置体系”一节在$EDITOR/$PAGER中打开响应内容可用系统编辑器/分页器打开支持$POSTING_EDITOR、$POSTING_PAGER、$POSTING_PAGER_JSON等环境变量见 docs/guide/index.md 的响应章节粘贴 curl 命令导入将 curl 命令直接粘贴进 URL 栏即可解析为请求实现见 importing/curl.py导出为 curl 命令把当前请求复制为 curl 命令含/不含 setup 脚本两个版本命令注册见 commands.py从 Postman / OpenAPI 导入支持导入 Postman Collection 与 OpenAPI 3.x 规范实现见 importing/postman.py、importing/open_api.py命令面板CtrlP打开可搜索执行所有功能命令提供者见 commands.py其中“请求前后运行 Python 脚本”是 Posting 区别于同类工具的突出能力它让你可以在发送前动态改写请求头、在收到响应后立即做断言或提取数据把脚本化的接口测试闭环收敛在终端内。安装 PostingREADME 推荐的安装方式是通过 uv支持 macOS、Linux 与 Windows。使用 uv 安装推荐# 快速安装 uvmacOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # 安装 Posting如本机缺少 Python 3.13uv 会自动安装 uv tool install --python 3.13 posting安装完成后即可启动postinguv tool install会把 Posting 安装到隔离环境中因此后续向该环境追加 Python 包例如供请求脚本使用的第三方库也非常方便uv会自动托管 Python 运行时无需手动管理版本。使用 pipx 安装如果你更习惯pipx同样可用pipx install posting兼容性说明README 明确指出Homebrew 和 NixOS 目前不被官方支持。原因在于 Posting 依赖的部分 Rust/C 原生依赖在 Homebrew 下编译耗时可能超过 10 分钟而通过 uv 安装通常只需毫秒级时间pipx 也仅需数秒详见 docs/guide/index.md 的安装说明。因此文档建议不要尝试用pip直接安装 Posting统一走 uv 或 pipx 的隔离环境方案。首次启动与 CLI 命令从源码 src/posting/main.py 可以看到Posting 的 CLI 基于 Click 构建默认不带任何子命令即直接进入 TUI。首次启动时程序会自动完成两件事对应create_config_file与create_default_collection创建空配置文件创建默认集合目录。这两个位置的确定逻辑在 src/posting/locations.py 中遵循 XDG 规范配置文件$XDG_CONFIG_HOME/posting/config.yaml通常为~/.config/posting/config.yaml默认集合目录$XDG_DATA_HOME/posting/default通常为~/.local/share/posting/default主题目录$XDG_DATA_HOME/posting/themes。这些路径会按需自动创建mkdir(exist_okTrue, parentsTrue)。posting locate用于快速定位上述关键路径源码中支持三个参数posting locate config # 打印配置文件路径 posting locate collection # 打印默认集合目录路径 posting locate themes # 打印主题目录路径posting --collection启动时指定集合目录。集合本质上就是一个普通目录README 的配套指南建议为每个项目单独建一个集合并纳入版本控制mkdir my-collection posting --collection my-collection此后在该会话中创建的所有请求都会以.posting.yaml文件保存到该目录。不指定--collection时请求落入“default”全局集合——它由 Posting 在文件系统上预留与你启动时的当前目录无关适合随手做的一次性请求。posting --env指定要加载的.env文件该选项可以重复使用以加载多个文件posting --collection my-collection --env dev.env --env local.env源码中如果未显式传入--env而当前目录存在posting.envPosting 会自动加载它。环境变量随后会注入到请求变量体系中见 variables.py。posting import用于导入外部规范详见下文“导入导出”一节支持--type openapi默认与--type postman以及-o/--output指定输出目录。配置体系配置文件、环境变量与 .env 文件Posting 支持三种配置来源其优先级从高到低在 docs/guide/configuration.md 中有明确说明配置文件YAML环境变量.env文件配置文件配置文件位置可用posting locate config查询内容为 YAML示例theme: galaxy layout: horizontal response: prettify_json: false heading: visible: true show_host: false环境变量所有配置项都可以用环境变量覆盖将配置名加上POSTING_前缀即可嵌套配置用__分隔。例如设置POSTING_THEMEgalaxy即可切换主题heading.visible对应POSTING_HEADING__VISIBLEfalse。.env 文件.env文件适合按环境dev/prod切换配置内容同样是带POSTING_前缀的键值对POSTING_THEMEcobalt POSTING_LAYOUTvertical POSTING_HEADING__VISIBLEfalse.env文件与集合相互独立但官方建议可以将其放入集合目录内方便随集合一起版本化与分享。此外 SSL 校验也支持配置Posting 默认使用certifi提供的 CA 证书包校验 SSL同时可进行自定义证书配置详情参见 docs/guide/configuration.md。导入与导出打通 curl、OpenAPI 与 Postman粘贴 curl 命令导入这是 README 中特别强调的效率特性直接把一条 curl 命令粘贴进 URL 栏Posting 会解析出请求方法、URL、请求头与 body 并填充到界面中覆盖已有值省去手工搬移参数的时间。该功能被标注为实验性实现在 importing/curl.py配套测试见 tests/test_curl_import.py。导出为 curl 命令通过命令面板CtrlP可以执行export: copy as curl把当前请求复制为 curl 命令另有export: copy as curl (no setup scripts)变体即不包含 setup 脚本的版本还支持export: copy as YAML将当前请求含未保存的界面状态以 YAML 复制到剪贴板命令注册见 commands.py。这意味着你可以在 Posting 里可视化编辑、再导出给同事或文档使用双向打通。从 OpenAPI 导入Posting 可以将 OpenAPI 3.x 规范转换为集合posting import path/to/openapi.yaml可通过-o指定输出目录不指定时输出到默认集合目录。导入时Posting 会尝试按 API 的 URL 结构在集合内构建对应的目录层级便于浏览。实现见 importing/open_api.py测试见 tests/test_open_api_import.py。从 Postman 导入posting import --type postman path/to/postman_collection.json同样可用-o指定输出目录可用posting locate collection查询默认位置。Postman 集合中的变量也会一并导入写入集合目录内的.env文件中。仓库提供了导入测试样本 tests/sample-importable-collections/postman_collection.json 与对应测试 tests/test_postman_import.py。需要注意的是导入功能当前仍标记为“实验性”遇到失败时可带上完整 traceback 提交 issue。命令面板与键盘工作流Posting 的绝大多数功能都可通过命令面板触达。按CtrlP打开面板后输入关键词即可过滤并执行命令。从 commands.py 的实现可以归纳出命令面板的几大类能力布局与视图切换垂直/水平布局、展开/重置请求或响应区、开关集合浏览器导出复制为 curl含/不含 setup 脚本、复制为 YAML主题与环境预览主题当前版本在非 ANSI 模式下可用、加载.env文件帮助与退出显示/隐藏按键帮助侧栏、打开在线文档、退出 Posting。配合 README 强调的 jump modeCtrlO与全局发送快捷键CtrlJPosting 形成了一套“全程不离键盘”的接口调试工作流CtrlT选方法 →CtrlL聚焦 URL →CtrlO跳转 Body →CtrlJ发送 →CtrlS保存。参与开发与测试如果你希望为 Posting 贡献代码仓库在 CONTRIBUTING.md 中给出了完整的开发流程README 也指向了这份文档。uv sync # 创建开发虚拟环境并安装依赖 source .venv/bin/activate # 激活虚拟环境 posting # 运行连接 Textual 开发者工具强烈推荐可这样启动TEXTUALdevtools,debug posting仓库自带测试集合可直接用于手动验证TEXTUALdevtools,debug posting --collection tests/sample-collections/ --env tests/sample-envs/sample_base.env --env tests/sample-envs/sample_extra.env运行测试必须使用 Makefile 提供的命令见 Makefile因为测试需要在并行与串行两个分组中执行make testPosting 的 UI 测试以SVG 快照测试为主测试结束时截取应用界面快照并与上次结果对比不一致即失败。若改动符合预期可用make test-snapshot-update更新快照快照存放在 tests/snapshots是界面在不同场景下“长什么样”的权威依据。变更记录维护在 docs/CHANGELOG.md遵循 Keep a Changelog 格式。结语Posting 用“YAML 即请求”的存储哲学与终端优先的交互设计为 API 调试提供了不同于图形客户端的另一种范式请求文件可 diff、可评审、可随代码库演进配合 curl 双向导入导出、Postman/OpenAPI 迁移能力以及命令面板驱动的键盘工作流构成了一个完整且可落地的终端 API 工作台。如果你日常工作流已经重度依赖终端不妨从uv tool install --python 3.13 posting开始用它接管下一次接口调试。【免费下载链接】postingThe modern API client that lives in your terminal.项目地址: https://gitcode.com/gh_mirrors/po/posting创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表