API 要素:核心
API 描述 SDK
华德迪: 我有过的最好的工作。 。 。 .
Fury为API描述格式提供统一接口,例如: API 蓝图 财务报告和审定财务报表 斯瓦格语Name。 。 。 .
说明:要求 适配器 支持解析和序列化。 您需要安装至少一个适配器 。 你们可以 找到怒火适配器 通过npm.
使用量
安装
Fury.js作为npm模块提供.
$ npm install --save @apielements/core
折射接口
Fury.js 提供了基于 折射项目 元素规格,并使用 API 描述和数据结构命名空间。 适配器从API Bluprint等格式转换为Refract元素和Fury.js曝光了这些与API相关的便利功能. 例如:
import fury from '@apielements/core';
import apibParser from '@apielements/apib-parser';
// The input as a string
const source = 'FORMAT: 1A\n# My API\n...';
// Use the API Blueprint parser adapter
fury.use(apibParser);
// Parse the input and print 'My API'
const parseResult = await fury.parse({ source });
console.log(parseResult.api.title);
一旦你得到一个解析的API,它很容易通过:
parseResult.api.resourceGroups.forEach(function (resourceGroup) {
console.log(resourceGroup.title);
resourceGroup.resources.forEach(function (resource) {
console.log(resource.title);
resource.transitions.forEach(function (transition) {
console.log(transition.title);
transition.transactions.forEach(function (transaction) {
const request = transaction.request;
const response = transaction.response;
console.log(`${request.method} ${request.href}`);
console.log(`${response.statusCode} (${response.header('Content-Type')})`);
console.log(response.messageBody);
});
});
});
});
还可以进行复杂的全文件搜索和过滤。 例如,要打印所有定义的示例请求的 HTTP 方法和路径列表 :
/*
* Prints out something like:
*
* POST /frobs
* GET /frobs
* GET /frobs/{id}
* PUT /frobs/{id}
* DELETE /frobs/{id}
*/
function filterFunc(item) {
if (item.element === 'httpRequest' && item.statusCode === 200) {
return true;
}
return false;
}
console.log('All API request URIs:');
api.find(filterFunc).forEach(function (request) {
console.log(`${request.method} ${request.href}`)
});
参考:
多个怒火事件
可能有一天,您需要用不同的适配器或者在同一程序中设置的其他选项来进行多个Fury事件. 这可以通过 Fury 类 :
import {Fury} from '@apielements/core';
const fury1 = new Fury();
const fury2 = new Fury();
await fury1.parse(...);
写入适配器
适配器从API Bluprint等输入格式转换为Refract元素. 这使得一个单一的,一致的界面可以用于与多个输入的API描述格式交互. 写入自己的适配器允许您添加对新输入格式的支持.
说明 mediaTypes:它允许两种定义. 第一个是 数组 类型。 它旨在“抓住一切”实施.
如果适配器只执行一种愤怒的方法,或者如果所有的方法都接受同一种类型的媒体类型,那么这是有用的.
另一个可能的选择是使用带有方法映射名称的对象来进行MediaTyps的阵列. 它可以更好地进行颗粒性检测.
实例:
如果适配器只支持一种方法或所有方法支持同一种输入媒体类型:
export const mediaTypes = ['text/vnd.my-adapter'];
如果您需要区分支持的输入 媒体类型 :
export const mediaTypes = {
parse: ['text/vnd.my-parsing', 'text/vnd.another-supported-parsing'],
serialize: ['text/vnd.my-serialization'],
};
适配器由名称,媒体类型列表组成,最多可选四种公共功能: detect, (中文(简体) ), parse, (中文(简体) ), serialize 财务报告和审定财务报表 serializeSync。一个简单的例子可能是这样的:
export const name = 'my-adapter';
export const mediaTypes = ['text/vnd.my-adapter'];
export function detect(source[, method]) {
// If no media type is know, then we fall back to auto-detection. Here you
// can check the source and see if you think you can parse it.
//
// optional parmeter `method` give you hint about caller is going to invoke
// note that value can be undefined
return source.match(/some-test/i) !== null;
}
export async function parse({minim, generateSourceMap, mediaType, source}) {
// Here you convert the source into refract elements. Use the `minim`
// variable to access refract element classes.
const Resource = minim.getElementByClass('resource');
// ...
return elements;
}
export async function validate({minim, mediaType, source}) {
// Here you validate the source and return a parse result for any warnings or
// errors.
//
// NOTE: Implementing `validate` is optional, Fury will fallback to using
// `parse` to find warnings or errors.
return null;
}
export async function serialize({api, mediaType, minim}) {
// Here you convert `api` from javascript element objects to the serialized
// source format.
// ...
return outputString;
}
export function serializeSync({api, mediaType, minim}) {
// Here you convert `api` from javascript element objects to the serialized
// source format.
// ...
return outputString;
}
export default {name, mediaTypes, detect, parse, serialize, serializeSync};
现在您可以用 Fury.js 注册适配器 :
import fury from '@apielements/core';
import myAdapter from './my-adapter';
// Register my custom adapter
fury.use(myAdapter);
// Now parse my custom input format!
const parseResult = await fury.parse({ source: 'some-test\n...' });
console.log(parseResult.api.title);