
现微服务盛行,服务之间通信大概就两种方式Api和Rpc。 下面两个列子来让你了解Api和Rpc的区别。
Api 实现: Router::get('/article/{id}','ArticleController@get'); Router::post('/article','ArticleController@create'); Router::put('/article/{id}','ArticleController@edit'); Router::delete('/article/{id}','ArticleController@delete'); 然后在控制器Article调用模型
return Article::find($id)->toArray(); Rpc 实现 RpcServer::add('Article'); 没错就一行代码
假如机器 A 上面一个计算器 Counter,以 Rpc 的方式提供给其他机器使用.
计算器Counter代码
class Counter { private $i = 0; public function __construct($i = 0) { $this->i = $i; } // 加法 public function add($v) { $this->i += $v; return $this; } // 减法 public function sub($v) { $this->i -= $v; return $this; } // 乘法 public function mul($v) { $this->i *= $v; return $this; } // 除法 public function div($v) { $this->i /= $v; return $this; } // 获取结果 public function get() { return $this->i; } } Rpc 实现 RpcServer::add('Counter'); Rpc 客户端调用
$c = new ClientCounter(10); echo $c->add(3)->mul(2)->sub(10)->div(5)->get(); Api 实现:你觉得 Api 应该怎么实现?
以上代码是我在设计 one框架的一些思考?
如你喜欢请 star https://github.com/lizhichao/one
如其他观点,欢迎留言讨论.
1 OMGZui Dec 24, 2018 |
2 tanszhe OP @OMGZui 看很多文章总喜欢把 tpc http 传输协议扯进来,api 和 rpc 都可以利用这些协程传输。 还有打包方式 文本格式二进制格式 api 和 rpc 都可以使用。和传输协议 打包方式无关。 |
3 zarte Dec 24, 2018 不了解 rpc,但是第一个的 rpc 栗子你省略了其他代码吧要不然怎么区分不同方法。 |
5 realpg PRO 不说 RPC 协议实现 消息报文格式 就教一个高级语言怎么调用? 网络层出了问题怎么调试? |
7 hubqin Jan 4, 2019 via Android 最近也正要搞 rpc,微服务架构,用 thrift 来写通讯接口语言(IDL),还没入门。 |