后端的接口
作者:王书硕
之所以叫“后端的接口”是为了与“go的接口”区分开。
因为前端只能访问到go不能直接访问到后端,所以后端提供的接口,只能通过go访问。那么就要在go上加一个接口,前端访问go的接口,go访问后端的接口。
下面介绍一下实现一个go接口的步骤。
一、声明后端接口地址
在文件 trek/urls/url.yaml
中声明接口地址
比如这样
project:
CloseProject: "/Project/close"
其中的 project
是模块,最后的url会是 /project/Project/close
。
然后进入到 go-gen/main
中,执行 sh ./gen.sh url
会自动生成 url。
二、添加go的接口
找到文件 trek/web/controllers/web-controllers/transparent/index.go
1. 在 BeforeActivation
方法中创建go的接口
|
|
b.Handle
方法的三个参数分别是
- http method
- go接口url(前端访问的url)
- go接口的处理函数
2. 实现“处理函数”
在上面提到的BeforeActivation
方法下面,创建一个与它同级的方法,也就是接口处理函数,内容就是直接给后端发起一个请求。
其中第11行是第一步中声明的后端url地址
|
|
三、前端调接口
找到文件 apps/link/src/api/urls.ts
|
|
经过上面的3步麻烦的操作,终于可以调接口了
import client from '@client';
import { urls } from '@root/api';
...
client.post(urls.budgetAccount.batchSetIndicators, data);
...
透传的通用解
- 在各个模块下都定义一个A接口
project:
ProjectA: "/"
contract:
ContractA: "/"
- 接口处理
func (c *transparentController) BeforeActivation(b mvc.BeforeActivation) {
b.Handle(iris.MethodPost, "/A", "A")
}
var (
method = flag.String("method", "method", "backend interface method")
url = flag.String("url", "url", "backend interface url")
module = flag.String("module", "module", "backend interface module")
)
var hostMap = map[string]string{
"project": urls.ProjectA,
"contract": urls.ContractA,
}
func (c *transparentController) A() interface{} {
flag.Parse()
m := c.Ctx.Params().Get(*method)
u := c.Ctx.Params().Get(*url)
mod := c.Ctx.Params().Get(*module)
return Fetch(c, context.TFetchOption{
Method: m,
Url: path.Join(hostMap[mod], u),
})
}
- 前端使用
import client from '@client';
client.post("/A", {
method: 'post',
url: '/project/closeStage',
module: 'project',
});