Advanced -HTTP service
Development for HTTP services with Z1h is a very simple thing
Start
at the command line, type
z1h -web 30030
Above example can be opened at 30030
http service port
Can also be used to configure File (conf.json file after decompression)
z1h -conf conf.json
You can see the command line output
Initing z1h...
[Zwei.Ren/Web] Running on port :30030 with 8 routers.
[Zwei.Ren/Web] You may visit at 192.168.1.2:30030
Visit the following address :
you can see
Hello World! -- ZweiRen.Web
File Structure
The file structure is automatically created under the datas directory of this directory. Some examples are as follows:
File name | Use |
---|---|
api | Storge interface file |
assets | Store some resource files |
front | Generally used to store static front-end files |
Interface
The interface is in the datas/api
directory, create a file with the suffix .z1h
, you can create an interface for example:
// datas/api/hello.z1h
"Hello World!"
You can access http://127.0.0.1:30030/api/hello and fetch the return of the interface data
Request and Response
In the z1h file, each request will have a global variable this
(also can be request
), the type is * SimpleRouter
, which contains all the request information of the http request and response method
// Request
print(this.Method) // request method, such as get/post/put/delete/options
print(this.Request.URL.String()) // request path
print(this.GetGetParamMap()) // parameter in the url
print(this.GetHeaders()) // request header information
print(string(this.GetBody())) // request body
print(string(this.GetPostParams())) // The parsed request body
print(this.IP()) // requester IP
print(Object.keys(this.GetFileParams())) // Get the file(field name) in the request body
// Response
this.Redirect(302, "https://z1h.org/") // Request 302 redirect
this.ServeFile("datas/favicon.ico") // respond to the file
this.ResponseHeader("Content-Type", "text/plain") // set the response header
this.ResponseStatus(201) // Set the response status code
this.Tpl("hello", {title: "Template Test"}) // Response template file(views/hello.tpl)
For specific usage, please refer to the bottom of the appendix/SimpleRouter
Router
You can create a directory under the datas/api
directory, and then create a .z1h
file under the directory, you can automatically speak the corresponding path of the HTTP request to this interface.
For example:
// datas/api/account/info.z1h file
`Your IP: ${this.IP()}, browser: ${this.GetHeader("User-Agent")}`
Now you can access http://127.0.0.1:30030/api/account/info to see your IP and browser UserAgent information
Default handler
creates index.z1h
under thedatas / api
directory (or sub-directory), which can handle the default path
eg:
// datas/api/account/index.z1h
`current time Is ${now()}`
You can visit http://127.0.0.1:30030/api/account/index to see the returned time information
You can also ignore the last index
, directly visit http://127.0.0.1:30030/api/account/ see the same response data
The 404 page
You can creates 404.z1h
under the datas/api
directory (or subdirectory), which can handle requests when the requested address does not exist.
For example:
// datas/api/account/404.z1h file
`You go the wrong way`
Access http://127.0.0.1:30030/api/account/xxx to See the 404 message
assets resources
assets
directory is suitable for storing some static resources, such as jQuery.js
, etc.
For example, if you copy the image to datas/assets/logo.png
, you can use http://127.0.0.1:30030/assets/logo.png Get the picture.
Try to put a js file in it, then put an html file to reference it
front
front
folder is used to deploy front-end frameworks such as VUE
- Firstly make sure it is configured through
z1h -conf
started by way of file - The content corresponding to "key" in the configuration file is not empty, it is the key to update the front end, and the line is not commented
- Export the dist directory (such as using
npm run build
) - The dist The directory is compressed into a zip file
- Open http://127.0.0.1:30030/vueupdate
- Upload dist.zip, enter the key, confirm
You can go to http://127.0.0.1:30030/ See the project you deployed
Appendix
SimpleRouter
structure
name | type | description | example |
---|---|---|---|
Method | string | Request method(lowercase) | if (this.method!='Post')panic("Post Only!") |
DisableGZip | bool | Whether to try to gzip the result | this.DisableGZip = false // Make sure not to compress |
Writer | ResponseWriter | Include Write, WriteHeader, Header methods | this.Writer.Write (bytearray ("nihao")) |
Request | *net/http.Request | Go standard library structure | this.Request.URL.String() |
Method to get the request content
name | description | parameter | return value | example |
---|---|---|---|---|
IP | Get Requester IP | - | string | |
GetGetParamMap | Get all query parameters in url | - | map [string] string | |
GetGetParam | Get a query parameter in url | string field name | string field value | if (this.GetGetParam ("name") == "admin") return `Admin Hello` |
GetGetIntParam | Get a query integer parameter in the url | string field name, int default value | int parameter value | |
GetHeaders | Get all the header information in the request | - | map [string] [] string | |
GetHeader | Get a certain header information in the request | string header key | string header value | if (this.GetHeader ("User -Agent "). Contains (" android ")) return `Hello Android user` |
GetBody | Get the original request body | - | [] byte | return `Request body length $ {len (this.GetBody())}` |
GetPostParams | Get the deserialized request body content | - | map | |
GetPostParam | Get request body parameters | string field name | field value | |
GetFileParams | get file submitted by form | - | map [string] * MultipartFileData | |
GetFileParam | get a file submitted by form | string field name | * MultipartFileData |
response related method
name | Description | Parameters | Return Value | Example |
---|---|---|---|---|
Redirect | Redirect | int Status code, string link address | - | this.Redirect(302, "https://z1h.org") |
ServeFile | response file | string file path | - | this.ServeFile ("datas / favicon.ico") |
ResponseHeader | set response header | string header key, string header value | - | this.ResponseHeader ("Content-Type", "text / plain") |
ResponseStatus | Set response status code | int status code | - | this.ResponseStatus (201) |
Tpl | Response template file | string template name, template fill content , string sub-template … | - | this.Tpl ("hello", {title: "Template test "}) |