Documentation ¶
Overview ¶
Package apiware provides a tools which can bind the http/fasthttp request params to the structure and validate.
Copyright 2016 HenryLee. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Param tag value description:
tag | key | required | value | desc ------|----------|----------|---------------|---------------------------------- param | in | only one | path | (position of param) if `required` is unsetted, auto set it. e.g. url: "http://www.abc.com/a/{path}" param | in | only one | query | (position of param) e.g. url: "http://www.abc.com/a?b={query}" param | in | only one | formData | (position of param) e.g. "request body: a=123&b={formData}" param | in | only one | body | (position of param) request body can be any content param | in | only one | header | (position of param) request header info param | in | only one | cookie | (position of param) request cookie info, support: `*http.Cookie`,`http.Cookie`,`string`,`[]byte` param | name | no | (e.g.`id`) | specify request param`s name param | required | no | | request param is required param | desc | no | (e.g.`id`) | request param description param | len | no | (e.g.`3:6` `3`) | length range of param's value param | range | no | (e.g.`0:10`) | numerical range of param's value param | nonzero | no | | param`s value can not be zero param | maxmb | no | (e.g.`32`) | when request Content-Type is multipart/form-data, the max memory for body.(multi-param, whichever is greater) param | regexp | no | (e.g.`^\\w+$`) | verify the value of the param with a regular expression(param value can not be null) param | err | no |(e.g.`incorrect password format`)| the custom error for binding or validating NOTES: 1. the binding object must be a struct pointer 2. in addition to `*multipart.FileHeader`, the binding struct's field can not be a pointer 3. if the `param` tag is not exist, anonymous field will be parsed 4. when the param's position(`in`) is `formData` and the field's type is `*multipart.FileHeader`, `multipart.FileHeader`, `[]*multipart.FileHeader` or `[]multipart.FileHeader`, the param receives file uploaded 5. if param's position(`in`) is `cookie`, field's type must be `*http.Cookie` or `http.Cookie` 6. param tags `in(formData)` and `in(body)` can not exist at the same time 7. there should not be more than one `in(body)` param tag
List of supported param value types:
base | slice | special --------|------------|------------------------------------------------------- string | []string | [][]byte byte | []byte | [][]uint8 uint8 | []uint8 | *multipart.FileHeader (only for `formData` param) bool | []bool | []*multipart.FileHeader (only for `formData` param) int | []int | *http.Cookie (only for `net/http`'s `cookie` param) int8 | []int8 | http.Cookie (only for `net/http`'s `cookie` param) int16 | []int16 | struct (struct type only for `body` param or as an anonymous field to extend params) int32 | []int32 | int64 | []int64 | uint8 | []uint8 | uint16 | []uint16 | uint32 | []uint32 | uint64 | []uint64 | float32 | []float32 | float64 | []float64 |
Index ¶
- Constants
- Variables
- func Bind(structPointer interface{}, req *http.Request, pathParams KV) error
- func BindByName(paramsAPIName string, req *http.Request, pathParams KV) (interface{}, error)
- func ConvertAssign(dest reflect.Value, src ...string) (err error)
- func ParseTags(tag string) map[string]string
- func Register(structPointer interface{}, paramNameMapper ParamNameMapper, ...) error
- func SetParamsAPI(paramsAPI *ParamsAPI)
- type Apiware
- type Bodydecoder
- type Error
- type KV
- type Map
- type Param
- type ParamNameMapper
- type ParamsAPI
- func (paramsAPI *ParamsAPI) BindAt(structPointer interface{}, req *http.Request, pathParams KV) error
- func (paramsAPI *ParamsAPI) BindFields(fields []reflect.Value, req *http.Request, pathParams KV) (err error)
- func (paramsAPI *ParamsAPI) BindNew(req *http.Request, pathParams KV) (interface{}, error)
- func (paramsAPI *ParamsAPI) MaxMemory() int64
- func (paramsAPI *ParamsAPI) Name() string
- func (paramsAPI *ParamsAPI) NewReceiver() (interface{}, []reflect.Value)
- func (paramsAPI *ParamsAPI) Number() int
- func (paramsAPI *ParamsAPI) Params() []*Param
- func (paramsAPI *ParamsAPI) Raw() interface{}
- func (paramsAPI *ParamsAPI) RawBind(req *http.Request, pathParams KV) (interface{}, error)
- func (paramsAPI *ParamsAPI) SetMaxMemory(maxMemory int64)
- type Pathdecoder
- type Schema
Constants ¶
const ( TAG_PARAM = "param" // request param tag name TAG_IGNORE_PARAM = "-" // ignore request param tag value KEY_IN = "in" // position of param KEY_NAME = "name" // specify request param`s name KEY_REQUIRED = "required" // request param is required or not KEY_DESC = "desc" // request param description KEY_LEN = "len" // length range of param's value KEY_RANGE = "range" // numerical range of param's value KEY_NONZERO = "nonzero" // param`s value can not be zero KEY_REGEXP = "regexp" // verify the value of the param with a regular expression(param value can not be null) KEY_MAXMB = "maxmb" // when request Content-Type is multipart/form-data, the max memory for body.(multi-param, whichever is greater) KEY_ERR = "err" // the custom error for binding or validating MB = 1 << 20 // 1MB )
some define
Variables ¶
Functions ¶
func Bind ¶
Bind binds the net/http request params to the `structPointer` param and validate it. note: structPointer must be struct pointer.
func BindByName ¶
BindByName binds the net/http request params to a new struct and validate it.
func ConvertAssign ¶
ConvertAssign type conversions for request params.
ConvertAssign copies to dest the value in src, converting it if possible. An error is returned if the copy would result in loss of information. dest should be a pointer type.
func ParseTags ¶
ParseTags returns the key-value in the tag string. If the tag does not have the conventional format, the value returned by ParseTags is unspecified.
func Register ¶
func Register( structPointer interface{}, paramNameMapper ParamNameMapper, bodydecoder Bodydecoder, useDefaultValues bool, ) error
Register is similar to a `NewParamsAPI`, but only return error. Parse and store the struct object, requires a struct pointer, if `paramNameMapper` is nil, `paramNameMapper=toSnake`, if `bodydecoder` is nil, `bodydecoder=bodyJONS`,
Types ¶
type Apiware ¶
type Apiware struct { ParamNameMapper Pathdecoder Bodydecoder UseDefaultValues bool }
Apiware binds request paramters
func New ¶
func New(pathdecoder Pathdecoder, bodydecoder Bodydecoder, paramNameMapper ParamNameMapper, useDefaultValues bool) *Apiware
New creates a new apiware engine. Parse and store the struct object, requires a struct pointer, if `paramNameMapper` is nil, `paramNameMapper=toSnake`, if `bodydecoder` is nil, `bodydecoder=bodyJONS`,
type Bodydecoder ¶
Bodydecoder decodes params from request body.
type Error ¶
type Error struct { Api string `json:"api"` Param string `json:"param"` Reason string `json:"reason"` }
Error a formatted error type
type Param ¶
type Param struct {
// contains filtered or unexported fields
}
Param use the struct field to define a request parameter model
func (*Param) Description ¶
Description gets the description value for the param
func (*Param) IsRequired ¶
IsRequired tests if the param is declared
type ParamNameMapper ¶
ParamNameMapper maps param name from struct param name
type ParamsAPI ¶
type ParamsAPI struct {
// contains filtered or unexported fields
}
ParamsAPI defines a parameter model for an web api.
func GetParamsAPI ¶
GetParamsAPI gets the `*ParamsAPI` object according to the type name
func NewParamsAPI ¶
func NewParamsAPI( structPointer interface{}, paramNameMapper ParamNameMapper, bodydecoder Bodydecoder, useDefaultValues bool, ) ( *ParamsAPI, error, )
NewParamsAPI parses and store the struct object, requires a struct pointer, if `paramNameMapper` is nil, `paramNameMapper=toSnake`, if `bodydecoder` is nil, `bodydecoder=bodyJONS`,
func (*ParamsAPI) BindAt ¶
func (paramsAPI *ParamsAPI) BindAt( structPointer interface{}, req *http.Request, pathParams KV, ) error
BindAt binds the net/http request params to a struct pointer and validate it. note: structPointer must be struct pointer.
func (*ParamsAPI) BindFields ¶
func (paramsAPI *ParamsAPI) BindFields( fields []reflect.Value, req *http.Request, pathParams KV, ) ( err error, )
BindFields binds the net/http request params to a struct and validate it. Must ensure that the param `fields` matches `paramsAPI.params`.
func (*ParamsAPI) BindNew ¶
BindNew binds the net/http request params to a struct pointer and validate it.
func (*ParamsAPI) MaxMemory ¶
MaxMemory gets maxMemory when request Content-Type is multipart/form-data, the max memory for body.
func (*ParamsAPI) NewReceiver ¶
NewReceiver creates a new struct pointer and the field's values for its receive parameterste it.
func (*ParamsAPI) Raw ¶
func (paramsAPI *ParamsAPI) Raw() interface{}
Raw returns the ParamsAPI's original value
func (*ParamsAPI) RawBind ¶
RawBind binds the net/http request params to the original struct pointer and validate it.
func (*ParamsAPI) SetMaxMemory ¶
SetMaxMemory sets maxMemory for the request which Content-Type is multipart/form-data.
type Pathdecoder ¶
Pathdecoder parses path params function, return pathParams of KV type