Directus Java 脚本 SDK
特征
- 类型脚本第一 : SDK提供了稳健而安全的开发经验.
- 模块架构 : SDK被分割成单独的模块,使您能够对哪些特性进行颗粒控制 包括,并且可以在建设时使用.
- 轻而无依赖性: 它不需要外部图书馆,确保更轻的捆绑和精简 经历.
可编译客户端
客户端被分割成不同的功能,您可以混合和匹配来编曲一个只包含您需要的功能的客户端或 想要吗.
const client = createDirectus<Schema>('https://directus.example.com');
此客户端目前是一个空包装器,没有任何功能. 在你用它做任何事情之前,你必须 添加一些特性。 现有/正在进行下列可混合体:
rest()REST 请求函数- 添加
.request(...)关于客户端
- 添加
graphql()图QL 请求函数- 添加
.query(...)关于客户端
- 添加
staticToken()认证功能- 添加
.getToken()财务报告和审定财务报表.setToken()关于客户端
- 添加
authenticate()认证功能- 添加
.login({ email, password }), (中文(简体) ),.logout(), (中文(简体) ),.refresh()关于客户端 - 添加
.getToken()财务报告和审定财务报表.setToken()关于客户端
- 添加
realtime()网页连接- 添加
.subscribe(...), (中文(简体) ),.sendMessage(...), (中文(简体) ),.onWebsocket('message', (message) => {})关于客户端
- 添加
举个例子,我们将建立一个客户端,包括 rest 财务报告和审定财务报表 graphql数字 :
const client = createDirectus<Schema>('https://directus.example.com').with(rest()).with(graphql());
// do a REST request
const restResult = await client.request(readItems('articles'));
// do a GraphQL request
const gqlResult = await client.query<OutputType>(`
query {
articles {
id
title
author {
first_name
}
}
}
`);
认证
const client = createDirectus<Schema>('https://directus.example.com').with(rest()).with(authentication('json'));
await client.login('[email protected]', 'd1r3ctu5');
// do authenticated requests
const client = createDirectus<Schema>('https://directus.example.com')
.with(rest())
.with(staticToken('super-secure-token'));
// do authenticated requests
实时
这个 realtime() 扩展允许您使用 Directus REST WebSocket 工作.
订阅更新 :
const client = createDirectus<Schema>('https://directus.example.com').with(
realtime({
authMode: 'public',
}),
);
const { subscription, unsubscribe } = await client.subscribe('test', {
query: { fields: ['*'] },
});
for await (const item of subscription) {
console.log('subscription', { item });
}
// unsubscribe()
接收/发送信件 :
const client = createDirectus<Schema>('https://directus.example.com').with(
realtime({
authMode: 'public',
}),
);
const stop = client.onWebSocket('message', (message) => {
if ('type' in message && message['type'] === 'pong') {
console.log('PONG received');
stop();
}
});
client.sendMessage({ type: 'ping' });
构建您的外观
// The main schema type containing all collections available
interface MySchema {
collection_a: CollectionA[]; // regular collections are array types
collection_b: CollectionB[];
collection_c: CollectionC; // this is a singleton
// junction collections are collections too
collection_a_b_m2m: CollectionAB_Many[];
collection_a_b_m2a: CollectionAB_Any[];
}
// collection A
interface CollectionA {
id: number;
status: string;
// relations
m2o: number | CollectionB;
o2m: number[] | CollectionB[];
m2m: number[] | CollectionAB_Many[];
m2a: number[] | CollectionAB_Any[];
}
// Many-to-Many junction table
interface CollectionAB_Many {
id: number;
collection_a_id: CollectionA;
collection_b_id: CollectionB;
}
// Many-to-Any junction table
interface CollectionAB_Any {
id: number;
collection_a_id: CollectionA;
collection: 'collection_b' | 'collection_c';
item: string | CollectionB | CollectionC;
}
// collection B
interface CollectionB {
id: number;
value: string;
}
// singleton collection
interface CollectionC {
id: number;
app_settings: string;
something: string;
}