api support empty request or empty response (#72)

* rebase upstream

* rebase

* trim no need line

* trim no need line

* trim no need line

* update doc

* remove update

* api support empty request or empty response

* update readme

Co-authored-by: kingxt <dream4kingxt@163.com>
master
kingxt 4 years ago committed by GitHub
parent 9a57993e83
commit 598ff6d0fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,6 +7,7 @@ import (
"io" "io"
"strings" "strings"
"github.com/tal-tech/go-zero/core/stringx"
"github.com/tal-tech/go-zero/tools/goctl/api/spec" "github.com/tal-tech/go-zero/tools/goctl/api/spec"
) )
@ -57,13 +58,14 @@ type serviceEntityParser struct {
} }
func (p *serviceEntityParser) parseLine(line string, api *spec.ApiSpec, annos []spec.Annotation) error { func (p *serviceEntityParser) parseLine(line string, api *spec.ApiSpec, annos []spec.Annotation) error {
line = strings.TrimSpace(line) var defaultErr = fmt.Errorf("wrong line %q, %q", line, routeSyntax)
line = strings.TrimSpace(line)
var buffer = new(bytes.Buffer) var buffer = new(bytes.Buffer)
buffer.WriteString(line) buffer.WriteString(line)
reader := bufio.NewReader(buffer) reader := bufio.NewReader(buffer)
var builder strings.Builder var builder strings.Builder
var fields []string var fields = make([]string, 0)
for { for {
ch, _, err := reader.ReadRune() ch, _, err := reader.ReadRune()
if err != nil { if err != nil {
@ -87,17 +89,22 @@ func (p *serviceEntityParser) parseLine(line string, api *spec.ApiSpec, annos []
} }
if len(fields) < 3 { if len(fields) < 3 {
return fmt.Errorf("wrong line %q, %q", line, routeSyntax) return defaultErr
} }
method := fields[0] method := fields[0]
path := fields[1] path := fields[1]
req := fields[2] req := fields[2]
var returns string var returns string
if len(fields) > 4 {
returns = fields[4] if stringx.Contains(fields, returnsTag) {
if fields[3] != returnsTag { if fields[len(fields)-1] != returnsTag {
return fmt.Errorf("wrong line %q, %q", line, routeSyntax) returns = fields[len(fields)-1]
} else {
return defaultErr
}
if fields[2] == returnsTag {
req = ""
} }
} }

@ -17,18 +17,11 @@
> -api 自定义api所在路径 > -api 自定义api所在路径
> >
> -dir 自定义生成目录 > -dir 自定义生成目录
#### 保持goctl总是最新版
第一次运行会在~/.goctl里增加下面两行
```Plain Text
url = http://47.97.184.41:7777/
```
#### API 语法说明 #### API 语法说明
```Plain Text ```golang
info( info(
title: doc title title: doc title
desc: > desc: >
@ -128,7 +121,7 @@ service user-api {
1. info部分描述了api基本信息比如Authapi是哪个用途。 1. info部分描述了api基本信息比如Authapi是哪个用途。
2. type部分type类型声明和golang语法兼容。 2. type部分type类型声明和golang语法兼容。
3. service部分service代表一组服务一个服务可以由多组名称相同的service组成可以针对每一组service配置jwt和auth认证另外通过folder属性可以指定service生成所在子目录。 3. service部分service代表一组服务一个服务可以由多组名称相同的service组成可以针对每一组service配置folder属性来指定service生成所在子目录。
service里面包含api路由比如上面第一组service的第一个路由doc用来描述此路由的用途GetProfileHandler表示处理这个路由的handler service里面包含api路由比如上面第一组service的第一个路由doc用来描述此路由的用途GetProfileHandler表示处理这个路由的handler
`get /api/profile/:name(getRequest) returns(getResponse)` 中get代表api的请求方式get/post/put/delete, `/api/profile/:name` 描述了路由path`:name`通过 `get /api/profile/:name(getRequest) returns(getResponse)` 中get代表api的请求方式get/post/put/delete, `/api/profile/:name` 描述了路由path`:name`通过
请求getRequest里面的属性赋值getResponse为返回的结构体这两个类型都定义在2描述的类型中。 请求getRequest里面的属性赋值getResponse为返回的结构体这两个类型都定义在2描述的类型中。

Loading…
Cancel
Save