今日油价 OpenAPI 3.0 文档:导入 Postman 与 Swagger UI 调试

约 14 分钟 进阶今日油价OpenAPIPostmanSwagger UI
# 今日油价 OpenAPI 3.0 文档:导入 Postman 与 Swagger UI 调试 接口/接入点:今日油价(apiCode=138,接口级 OpenAPI 3.0) · 免费 · 适用人群:注重 API 治理的团队 · 阅读时间:约 5 分钟 · 最后实测核对:2026-09-18 团队同时接多个接口时,手写请求模板既慢又容易跟文档脱节。今日油价提供接口级 OpenAPI 3.0 文档,导入 Postman 或 Swagger UI 后,两个接入点的请求结构直接可用。 ## 核心要点 - 文档地址是 `https://www.showapi.com/openapi/market/138.yaml`,同目录下有 `.json` 版本。 - 文档里能拿到接口文档页不展示的两项信息:`x-read-timeout` / `x-connect-timeout` 都是 5 秒,以及每个接入点的 `x-pointCode`。 - 文档中的 `prov` 必填规则与实际一致:`138-49` 标为必填,`138-46` 不标必填。 ## 文档里有什么 2026-09-18 读取文档得到的结构信息: | 项 | 值 | |---|---| | OpenAPI 版本 | 3.0.3 | | 标题 | 今日油价 | | 服务地址 | `https://route.showapi.com` | | 接入点 | `/138-46`(查询油价)、`/138-49`(查询行情) | | `x-pointCode` | 46、49 | | `x-read-timeout` / `x-connect-timeout` | 均为 5 秒 | | 鉴权 | `AppKeyAuth`,apiKey 类型,位置在 query,参数名 `appKey` | | 返回包裹结构 | `ShowapiResEnvelope`,含 `showapi_res_code`、`showapi_res_error`、`showapi_res_id`、`showapi_fee_num` | 超时值只在 OpenAPI 文档里能看到,接口文档页不展示这两个字段。写代码时按 5 秒设超时更贴合实际。 ## 拿文档 ```bash # YAML 版本 curl -O "https://www.showapi.com/openapi/market/138.yaml" # JSON 版本,便于程序直接解析 curl -o 138.json "https://www.showapi.com/openapi/market/138.json" ``` 用 Python 读取并核对接入点与超时: ```python import requests doc = requests.get("https://www.showapi.com/openapi/market/138.json", timeout=10).json() print("版本:", doc["openapi"]) print("标题:", doc["info"]["title"]) for path, item in doc["paths"].items(): method = item["post"] required = ( method.get("requestBody", {}) .get("content", {}) .get("application/x-www-form-urlencoded", {}) .get("schema", {}) .get("required", []) ) print( f"{path} {method['summary']} " f"pointCode={item.get('x-pointCode')} " f"read/connect={item.get('x-read-timeout')}/{item.get('x-connect-timeout')} " f"必填参数={required or '无'}" ) ``` 输出: ``` /138-49 查询行情 pointCode=49 read/connect=5/5 必填参数=['prov'] /138-46 查询油价 pointCode=46 read/connect=5/5 必填参数=无 ``` 这段输出直接说明了两个接入点对 `prov` 的处理差别,出处是文档本身而不是口口相传。 ## 导入 Postman 1. 打开 Postman,选择 Import 2. 选 File 或 Link,地址填 `https://www.showapi.com/openapi/market/138.yaml` 3. 导入后会生成一个 Collection,里面包含两个请求,路径与参数已预填 导入后还需要手动补两项: - 在请求的 query 参数里加上 `appKey`,值按环境变量设置。文档把鉴权定义在 query,不在请求头。 - 把 `prov` 填上一个标准省名,例如「北京」。省名按精确匹配处理,实测 `prov=北京市` 会返回 `ret_code=-1`。 ## 导入 Swagger UI Swagger UI 的 Import URL 填文档地址即可可视化浏览两个接入点的参数与响应结构。本地起一个也可以: ```bash docker run -p 8080:8080 -e SWAGGER_JSON_URL=https://www.showapi.com/openapi/market/138.yaml \ swaggerapi/swagger-ui ``` 导入后可以在界面上直接发请求,把 `appKey` 填进 query 参数即可。 ## 用文档驱动代码生成 OpenAPI 文档可以直接喂给代码生成工具,省掉手写请求封装。一个最小的 Python 封装示例: ```python import requests BASE = "https://route.showapi.com" TIMEOUT = 5 # 取自文档的 x-read-timeout class OilPriceClient: def __init__(self, appkey): self.appkey = appkey def _call(self, path, prov=None): params = {"appKey": self.appkey} if prov: params["prov"] = prov resp = requests.post(f"{BASE}/{path}", data=params, timeout=TIMEOUT).json() if resp.get("showapi_res_code") != 0: raise RuntimeError(resp.get("showapi_res_error")) body = resp["showapi_res_body"] if body.get("ret_code") != 0: raise RuntimeError(body.get("remark")) return body def price(self, prov=None): """查询油价(138-46),prov 选填。""" return self._call("138-46", prov) def market(self, prov): """查询行情(138-49),prov 必填。""" return self._call("138-49", prov) client = OilPriceClient("YOUR_APPKEY") print(client.market("北京")["next_change_time"]) ``` Node.js 版本: ```javascript const BASE = "https://route.showapi.com"; const TIMEOUT_MS = 5000; // 取自文档的 x-read-timeout function createClient(appkey) { async function call(path, prov) { const params = new URLSearchParams({ appKey: appkey }); if (prov) params.set("prov", prov); const resp = await fetch(`${BASE}/${path}`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: params, signal: AbortSignal.timeout(TIMEOUT_MS), }); const data = await resp.json(); if (data.showapi_res_code !== 0) throw new Error(data.showapi_res_error); if (data.showapi_res_body.ret_code !== 0) throw new Error(data.showapi_res_body.remark); return data.showapi_res_body; } return { price: (prov) => call("138-46", prov), market: (prov) => call("138-49", prov), }; } const client = createClient("YOUR_APPKEY"); console.log((await client.market("北京")).next_change_time); ``` cURL(对照文档里的示例路径): ```bash curl -X POST "https://route.showapi.com/138-46?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" -d "prov=%E5%8C%97%E4%BA%AC" ``` ## 适用条件与注意事项 - 文档里的响应示例使用静态示例值,不是实时行情。2026-09-18 实测同一时刻 `p0` 返回 8.02,与文档示例不同,接入后按真实返回核对。 - 鉴权参数在 query 里,导入工具后需要手动补 `appKey`。 - 一份文档覆盖全部接入点,接口结构变动时重新拉取最新版本。 - 文档定义了统一的返回包裹 `ShowapiResEnvelope`,业务数据在 `showapi_res_body` 内,两层状态码都要判断。 - AppKey 建议通过环境变量注入,不要写进 Collection 的明文变量。 ## FAQ **Q1:文档覆盖两个接入点吗?** 覆盖。`138.yaml` 与 `138.json` 的 `paths` 下包含 `/138-46`(查询油价)与 `/138-49`(查询行情)。 **Q2:除了 Postman 还能用什么工具?** 任何支持 OpenAPI 3.0 导入的工具都可以,例如 Swagger UI、Swagger Editor,也可以直接写脚本解析 `.json` 版本。 **Q3:超时值应该设多少?** 按文档标注的 5 秒设置。`x-read-timeout` 与 `x-connect-timeout` 实测值都是 5。 **Q4:导入后直接发请求为什么返回鉴权失败?** 文档把鉴权定义在 query 参数 `appKey`,导入时通常不会自动填值,需要手动补上真实 AppKey。 **Q5:文档里的示例返回能当实时行情用吗?** 不能。示例是静态文档内容,实时价格请以接口返回为准。 ## 相关能力 / 下一步阅读 - [今日油价 MCP 服务:在 Cherry Studio 里用中文工具名查询](https://www.showapi.com/guides/oilprice-mcp-138) - [今日油价返回字段对照:p89/p92/p0 与 ct 的含义与空值处理](https://www.showapi.com/guides/oilprice-fields-138) - [今日油价:用 Python 查北京 92 号汽油价格的完整调用流程](https://www.showapi.com/guides/oilprice-quickstart-138) - **本系列共 13 篇**:查看[今日油价指南总目录](https://www.showapi.com/guides/oilprice-guides-138)
加载中...