商务工具( 改进后) TypeScript SDK 客户端
这是新改进的Typescript SDK客户端.
用法实例
npm install --save @commercetools/ts-client
npm install --save @commercetools/platform-sdk
or
yarn add @commercetools/ts-client
yarn add @commercetools/platform-sdk
import {
type Next,
type HttpMiddlewareOptions,
type AuthMiddlewareBaseOptions,
type ClientRequest,
type MiddlewareRequest,
type MiddlewareResponse,
type Client,
createHttpMiddleware,
createConcurrentModificationMiddleware,
createAuthMiddlewareForClientCredentialsFlow,
ClientBuilder,
} from '@commercetools/ts-client'
import { createApiBuilderFromCtpClient } from '@commercetools/platform-sdk'
const projectKey = 'mc-project-key'
const authMiddlewareOptions = {
host: 'https://auth.europe-west1.gcp.commercetools.com',
projectKey,
credentials: {
clientId: 'mc-client-id',
clientSecret: 'mc-client-secrets',
},
oauthUri: '/oauth/token', // - optional: custom oauthUri
scopes: [`manage_project:${projectKey}`],
httpClient: fetch,
}
const httpMiddlewareOptions = {
host: 'https://api.europe-west1.gcp.commercetools.com',
httpClient: fetch,
}
const retryOptions = {
maxRetries: 3,
retryDelay: 200,
backoff: true,
retryCodes: [503],
}
const loggerFn = (response) => {
// log response object
console.log(response)
}
// custom middleware
function middleware(options) {
return (next: Next) =>
async (request: MiddlewareRequest): Promise<MiddlewareResponse> => {
const { response, ...rest } = request
// other actions can also be carried out here e.g logging,
// error handling, injecting custom headers to http requests etc.
console.log({ response, rest })
return next({ ...request })
}
}
const client: Client = new ClientBuilder()
.withPasswordFlow(authMiddlewareOptions)
.withLoggerMiddleware({ loggerFn })
.withCorrelationIdMiddleware({
generate: () => 'fake-correlation-id' + Math.floor(Math.random() + 2),
})
.withHttpMiddleware(httpMiddlewareOptions)
.withMiddleware(middleware({})) // <<<------------------- add the custom middleware here
.build()
const apiRoot = createApiBuilderFromCtpClient(client)
// calling the commercetools `api` functions
// get project details
apiRoot
.withProjectKey({ projectKey })
.get()
.execute()
.then((x) => {
/*...*/
})
// create a productType
apiRoot
.withProjectKey({ projectKey })
.productTypes()
.post({
body: { name: 'product-type-name', description: 'some description' },
})
.execute()
.then((x) => {
/*...*/
})
// create a product
apiRoot
.withProjectKey({ projectKey })
.products()
.post({
body: {
name: { en: 'our-great-product-name' },
productType: {
typeId: 'product-type',
id: 'some-product-type-id',
},
slug: { en: 'some-slug' },
},
})
.execute()
.then((x) => {
/*...*/
})
创建客户端
要创建客户端,请使用 ClientBuilder 课。 这个 ClientBuilder 类提供了流利的 API 配置客户端.
const authMiddlewareOptions = {
credentials: {
clientId: 'xxx',
clientSecret: 'xxx',
},
host: 'https://auth.europe-west1.gcp.commercetools.com',
projectKey: 'xxx',
}
const httpMiddlewareOptions = {
host: 'https://api.europe-west1.gcp.commercetools.com',
httpClient: fetch,
}
const client = new ClientBuilder()
.withHttpMiddleware(httpMiddlewareOptions)
.withConcurrentModificationMiddleware()
.withClientCredentialsFlow(authMiddlewareOptions)
.build()
这个 withMiddleware 方法可以用于以有序的方式添加中件功能(内置和自定义中件).
// Example
const authMiddlewareOptions = {
credentials: {
clientId: 'xxx',
clientSecret: 'xxx',
},
host: 'https://auth.europe-west1.gcp.commercetools.com',
projectKey: 'xxx',
}
const httpMiddlewareOptions = {
host: 'https://api.europe-west1.gcp.commercetools.com',
httpClient: fetch,
}
const logger = () => {
return (next) => async (request) => {
// log request object
console.log('Request:', request)
const response = await next(request)
// log response object
console.log('Response', response)
return response
}
}
const client = new ClientBuilder()
.withMiddleware(
createAuthMiddlewareForClientCredentialsFlow(authMiddlewareOptions)
)
.withMiddleware(createHttpMiddleware(httpMiddlewareOptions))
.withMiddleware(createConcurrentModificationMiddleware())
.withMiddleware(logger())
.build()
这将以命令的方式添加中间软件,首先是:
- 创建 AuthMiddle 软件用于认证证书
- 创建 HttpMiddle 软件
- 创建同步移动中端软件
- 日志
注意当使用 withMiddleware 函数可以将自定义的中间软件与已建的中间软件函数相并列,它将将自定义的中间软件添加到执行链的启动中.
// Example
const authMiddlewareOptions = {
credentials: {
clientId: 'xxx',
clientSecret: 'xxx',
},
host: 'https://auth.europe-west1.gcp.commercetools.com',
projectKey: 'xxx',
}
const httpMiddlewareOptions = {
host: 'https://api.europe-west1.gcp.commercetools.com',
httpClient: fetch,
}
const logger = () => {
return (next) => async (request) => {
// log request object
console.log('Request:', request)
const response = await next(request)
// log response object
console.log('Response', response)
return response
}
}
const client = new ClientBuilder()
.withClientCredentialsFlow(authMiddlewareOptions)
.withHttpMiddleware(httpMiddlewareOptions)
.withConcurrentModificationMiddleware()
.withMiddleware(logger())
.build()
执行顺序如下:
- 使用Middleware < -- -- -- 自定义中间软件
- 带有 client 证书
- 使用 HttpMiddle 软件
- 与同时期的移动中件