From e0f455e33f0fcc22220ea549e63efa5a382282d6 Mon Sep 17 00:00:00 2001 From: tanghc Date: Sun, 24 Mar 2019 19:16:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/README.md | 2 ++ doc/docs/_sidebar.md | 9 ++++--- doc/docs/files/1002_新增接口.md | 11 +++++++++ doc/docs/files/1005_接口交互详解.md | 30 +++++++++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 doc/docs/files/1005_接口交互详解.md diff --git a/doc/README.md b/doc/README.md index 1268ba28..e6955bf6 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,5 +1,7 @@ # 开发文档 +文档放在docs/files下,写完文档记得执行下`SidebarTest.main()`方法 + 配合gitee pages服务使用,gitee pages服务指定docs目录。 ## 本地查看开发文档 diff --git a/doc/docs/_sidebar.md b/doc/docs/_sidebar.md index 8728cf44..88077343 100644 --- a/doc/docs/_sidebar.md +++ b/doc/docs/_sidebar.md @@ -1,6 +1,7 @@ * 文档目录 - * [快速体验](files/1001_快速体验.md?t=1553335685610) - * [新增接口](files/1002_新增接口.md?t=1553335685628) - * [业务参数校验](files/1003_业务参数校验.md?t=1553335685628) - * [错误处理](files/1004_错误处理.md?t=1553335685628) + * [快速体验](files/1001_快速体验.md?t=1553426189495) + * [新增接口](files/1002_新增接口.md?t=1553426189514) + * [业务参数校验](files/1003_业务参数校验.md?t=1553426189514) + * [错误处理](files/1004_错误处理.md?t=1553426189515) + * [接口交互详解](files/1005_接口交互详解.md?t=1553426189515) diff --git a/doc/docs/files/1002_新增接口.md b/doc/docs/files/1002_新增接口.md index c83314ca..c069730a 100644 --- a/doc/docs/files/1002_新增接口.md +++ b/doc/docs/files/1002_新增接口.md @@ -32,6 +32,17 @@ value就是接口名,对应客户端的`method`参数 - 重启story服务,这样接口就可以使用了。 +## 接口命名 + +接口命名没有做强制要求,但我们还是推荐按照下面的方式进行命名: + +确保接口名唯一,即`method`参数全局唯一,这里需要做好相应规范,接口名的命名规则为:`服务模块.业务模块.功能模块.行为`,如: + +- mini.user.userinfo.get 小程序服务.用户模块.用户信息.获取 +- member.register.total.get 会员服务.注册模块.注册总数.获取 + +如果觉得命名规则有点长可以精简为:`服务模块.功能模块.行为`,如`member.usercount.get`,前提是确保前缀要有所区分,不和其它服务冲突。 + ## 测试接口 - 在sop-test工程下新建一个测试用例,`StoryDemoTest`,继承TestBase diff --git a/doc/docs/files/1005_接口交互详解.md b/doc/docs/files/1005_接口交互详解.md new file mode 100644 index 00000000..051975dc --- /dev/null +++ b/doc/docs/files/1005_接口交互详解.md @@ -0,0 +1,30 @@ +# 接口交互详解 + +开放平台所提供的接口有几十个到几百个不等,同样支持的服务也是多个的。就拿[支付宝开放平台](https://docs.open.alipay.com/api)来说 +它所提供的服务有,支付服务、会员服务、店铺服务、芝麻信用服务等。相信这些服务接口肯定不是写在同一个项目中,但是它的接口地址只有一个:https://openapi.alipay.com/gateway.do +从地址信息中可以看到,这是一个网关服务。也就是说,网关是所有请求的入口,然后通过请求分发的方式,把请求路由到具体某个服务中去。 +虽然支付宝开放平台的实现方式我们不得而知,但是这种思路是可行的。 + +SOP也是采用这种方式实现,大致步骤如下: + +- 每个服务注册到注册中心,在启动的时候把自己的接口信息上传到zookeeper,并且保证每一个接口都能对应到哪个服务。 +- 网关启动时同样注册到注册中心,获取zookeeper上的接口信息,保存到本地,并监听zookeeper上的接口信息,一旦接口信息有修改,网关这边能及时进行更新。 +- 网关收到客户端请求后,先进行签名校验,通过之后根据接口信息找到对应的服务,然后进行路由 +- 网关对返回结果进行处理(或不处理),返回给客户端。 + +如何通过接口参数找到对应的服务呢? + +确保接口名唯一,即`method`参数全局唯一,这里需要做好相应规范,接口名的命名规则应该:`服务模块.业务模块.功能模块.行为`,如: + +mini.user.userinfo.get 小程序服务.用户模块.用户信息.获取 + +member.register.total.get 会员服务.注册模块.注册总数.获取 + +如果觉得命名规则有点长可以精简为:`服务模块.功能模块.行为`,如`member.usercount.get`,前提是确保前缀要有所区分,不和其它服务冲突。 + +得益于Spring Cloud的注册中和和网关功能,我们能很方便的进行接口路由,并且还能实现LoadBalance,不需要自己再去实现。 + +整个SOP的架构如下图所示: + +![SOP架构图](https://images.gitee.com/uploads/images/2019/0309/093312_8afb4789_332975.png "sop.png") +