像使用本地函数同样使用http

经过内容寻址的方式,获取接口的惟一hash,这样就能够实现像本地函数同样的使用远程接口。node

接口

import { Observable } from 'ims-rxjs';
export abstract class ImsDemo {
  abstract getIndex(name: string): Observable<any>;
  abstract getIndex2(name: string): Observable<any>;
}
复制代码

nodejs

import { Injectable, Logger } from 'ims-core';
import { of } from 'ims-rxjs';
@Injectable()
export class ImsDemoImplClient extends ImsDemo {
  constructor(public logger: Logger) {
    super();
  }
  getIndex(name: string) {
    this.logger.info(`request ImsDemo getIndex: ${name}`);
    return of({
      demo: 'test',
      name: name,
    });
  }

  getIndex2(name: string) {
    this.logger.info(`request ImsDemo getIndex2: ${name}`);
    return of({
      demo: 'test',
      name: name,
    });
  }
}

// 服务端大致过程
// 1.将ImsDemo提取hash特征,获取服务端地址hash
// 2.实例化接口实例
// 3.注册服务地址
// 4.返回服务处理结果
let instance = new ImsDemoImplClient(logger)
app.use(`/${hash}/:method`,(req,res,next)=>{
    let method = req.params.method;
    let result = instance[method](...req.body);
    res.end(result)
})
复制代码

客户端

// 1.将ImsDemo提取hash特征,获取服务端地址
// 2.拼接地址`/${hash}/${method}`
// 3.发送请求,请求附带参数是params
// 4.收到回复获得结果
injector.get(ImsDemo).getIndex('ims').subscribe(res=>{
    console.log('http请求结果是',res)
})
复制代码
相关文章
相关标签/搜索