一种非常优雅的Rest接口调用方式
基于Restful风格接口设计的模块化接口url生成器
集中管理接口url
默认使用 fetch 作为接口加载器
可以给模块单独设置 baseUrl
支持 response formatter 配置、支持单个 module formatter
内置默认 filter,当前只有一个 over,重载 response data filed
npm install cherry-rest --save
import Cherry,{module as CherryModule,config as CherryConfig} from 'cherry-rest'
基于业务Rest接口定义模块
//方式一 CherryModule('name'); //方式二、定义多个模块、模块设置别名 CherryModule('module2|home,moudle3|user'); //方式三、复合继承模式 CherryModule([{ name:'module3', alias:'about', children:[{ name:'info', },{ name:'concat' }] }]);
调用
Cherry.module3.info.query({query:{id:1}}).then(res=>res) //fetch get /about/info?id=1; Cherry.module3.info.create({body:{name:1}}).then(res=>res) //fetch post /about/info {name:1}; Cherry.module3.info.update({query:{id:1}}).then(res=>res) //fetch put /about/info?id=1; Cherry.module3.info.remove({path:'1,2'}).then(res=>res) //fetch delete /about/info/1/2;
Test
import Cherry,{module as CherryModule,config as CherryConfig} from '../dist/index.js' //http://ip.taobao.com/service/getIpInfo.php?ip=114.114.114.114 jest.setTimeout(1200000); CherryConfig({ credentials:'include' },{ baseUrl:'http://ip.taobao.com', formatter:function(res){ return res.json() } }) CherryModule('ip|service',{ formatter:[function(data){ return data.data; }], filters:[{ name:'over', options:['city_id|id'] }] }); it('async & filters test', () => { expect.assertions(1); return Cherry.ip.query({path:'getIpInfo.php',query:{ip:'114.114.114.114'}}).then(data => { expect(JSON.stringify(data)).toEqual(JSON.stringify({"id":"320100"})) }); });
API Example:
get http://www.baidu.com/mock/v1/user
get http://www.baidu.com/mock/v1/user?id=${userId}
get http://www.baidu.com/mock/v1/user/${userId}/blogs
get http://www.baidu.com/mock/v1/books
post http://www.baidu.com/mock/v1/user {name:'hello'}
put http://www.baidu.com/mock/v1/user/{userId} {name:'world'}
//import import Cherry,{module as CherryModule,config as CherryConfig} from 'cherry-rest' //基于rest业务接口定义模块 //配置baseUrl CherryConfig({ //默认使用fetch请求数据、这里可以配置fetch fetch:{}, common:{ baseUrl:'http://www.baidu.com' } }) //定义模块 CherryModule([{ name:'app', alias:'mock', children:[{ name:'version', alias:'v1', children:[{ name:'user' },{ name:'books' }] }] }]) let User=Cherry.app.version.user; let Book=Cherry.app.version.app; //GET http://www.baidu.com/mock/v1/user User.query() //GET http://www.baidu.com/mock/v1/user?id=123 User.query({query:{id:'123'}}) //POST http://www.baidu.com/mock/v1/user {name:'hello'} User.create({body:{name:'hello'}}) //PUT http://www.baidu.com/mock/v1/user/123 {name:'world'} User.update({path:'123',body:{name:'world'}}) //GET http://www.baidu.com/mock/v1/user/${userId}/blogs User.query({path:['123','blogs']) //DELETE http://www.baidu.com/mock/v1/user/123 User.remove({path:'123')
4.2 接口调用 Camel管理端定义了两个版本的接口。第一版接口路径以"/api/"开头,第二版接口路径以"/api/v2"开头。 两个版本接口的主要区别在于:第二版本接口将更改配置、发布配置文件这两部操作聚合成为一个原子操作。则调用第二版本接口,如果成功,则Nginx当前配置为更改之后的配置;如果失败,则Nginx当前配置为调用接口之前的配置。不会出现不安全的中间状态。 第一版本接口: 更新节
一般在开始使用tendermint之前, 作为开发者应该最关心的就是abci接口了, 因为这个是和tendermint进行交互的关键。 个人觉得这个也是tendermint的优势之一。 有了这个接口定义才有了实现通用区块链平台的可能。 所以说如果作为一个开发者, 不想了解整个tendermint的流转流程, 只想实现自己特定功能的区块链, 那么这一篇文章至少是应该看得。 我会从客户端创建开始说起,
MiniFramework 从 1.0.8 版本开始,新增了对于 REST 模式的 API 接口的版本调用方法。可以在发出请求时,向 HEADER 中添加一个名为 Ver 的参数,作用是声明调用的目标接口的版本,其值应为一个整数。MiniFramework 在接到这个请求时,会按 HEADER 中给出的版本号参数 Ver 调用对应的 API 接口文件。 当某个 API 接口需要增加新版本时,开发者
TOP api 是 淘宝开放平台提供的api。 完善的top api列表参考:http://open.taobao.com/docs/api_list.htm 要在插件中调用Top接口,需引入QAP-SDK 模块。 以下演示调用taobao.time.get接口获取数据的情况。 /** @jsx createElement */ import {createElement, Component}
主要内容:1.Aware是什么时候赋值进来的,2.Aware接口的作用,3.Aware接口如何调用,4.测试,5.执行流程Aware接口是利用的回调机制, 将资源注入ioc容器 1.Aware是什么时候赋值进来的 1.createBeanInstance实例化 bean 2.populateBean属性注入 3.initializingBean初始化对象 createBeanInstance:getBean -> doGetBean -> createBean -> doCreateBean i
LFMultipleLivenessManager 调用流程 LFMultipleLivenessManager 是对LFMultipleLivenessController 调用流程进一步的封装,方便用户直接调用 1 初始化 LFMultipleLivenessManager 输入token token LFMultipleLivenessManager *manager = [[LFMulti
1.初始化 创建LFLivenessSDK对象detector,具体传参请查看demo /** * 获取token * 强烈建议:appID不要放在客户端 */ private void requestToken() { } 设置参数,开启人脸识别 /** * 开始人脸识别 */ LFLivenessBu
LFMultipleLivenessManager 调用流程 LFMultipleLivenessManager 是对LFMultipleLivenessController 调用流程进一步的封装,方便用户直接调用 1 初始化 LFMultipleLivenessManager 输入token token LFMultipleLivenessManager *manager = [[LFMulti