dazn-commerce-contracts
唯一的真相来源 DAZN商务 /v1 有线格式。
zd模式→推断TypeScript类型→生成 OpenAPI 3.1 和一个 输入
客户端. 发布(永久)到私有注册中心,并由
dazn-commerce-engine 和 dazn-storefront. 如果它穿过导线,它是有定义的
在这里。
安装
配置 @dazn 范围设置为私有注册中心(参见 .npmrc),那么:
pnpm add dazn-commerce-contracts
使用模式和类型
import { Money, Cart, OrderDetail, OrderStatus, parseOr } from 'dazn-commerce-contracts';
const price: Money = { amount: 2500, currency: 'GBP' }; // £25.00
const cart = Cart.parse(await res.json()); // validated at the boundary
每个模式都以相同的名称-与其推断类型一起导出 Cart 是
模式(一个值)和 Cart 类型。
使用类型化客户端
import { createClient } from 'dazn-commerce-contracts/client';
const api = createClient({
baseUrl: 'https://storefront.example.com/v1',
getToken: () => session.token,
});
const { data } = await api.catalog.listProducts({ limit: 20 });
const order = await api.orders.get('ord_01H9Z...'); // OrderDetail, validated
客户端使用模式验证每个响应,并抛出一个类型错误
DaznApiError (带标准误差 code)的非2xx回应。
OpenAPI
生成的OpenAPI 3.1文档发布于 dazn-commerce-contracts/openapi.json 和
由发动机在 /v1/openapi.json。
黄金法则
- 钱 总是整数小单位+ ISO-4217 -从来没有一个浮点数,从来没有一个裸 号码。
/v1仅为添加剂。 一个突破性的变化是一个新的主版本和一个新的API 版本名称空间。
脚本
pnpm build # dist/ + client/ + openapi/openapi.json
pnpm test # schema round-trip tests
pnpm lint # ESLint
pnpm typecheck # tsc --noEmit (strict)