Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wklken/echo
An server will echo the requests detail into response. For api testing / benchmark for your proxies like APIGateway/ReverseProxy/nginx/traefik.
https://github.com/wklken/echo
apigateway golang nginx proxy reverseproxy test testing-tools traefik
Last synced: 12 days ago
JSON representation
An server will echo the requests detail into response. For api testing / benchmark for your proxies like APIGateway/ReverseProxy/nginx/traefik.
- Host: GitHub
- URL: https://github.com/wklken/echo
- Owner: wklken
- License: mit
- Created: 2019-05-31T10:20:31.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-10-22T01:35:02.000Z (about 1 year ago)
- Last Synced: 2024-11-09T21:46:11.551Z (2 months ago)
- Topics: apigateway, golang, nginx, proxy, reverseproxy, test, testing-tools, traefik
- Language: Go
- Homepage:
- Size: 129 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# echo
Echo server will echo the requests detail into response.
For api testing or benchmarking for your proxies like APIGateway/ReverseProxy/nginx/traefik.
Build on [chi](https://github.com/go-chi/chi) with simple logical, so the performance is good enough.
# run
```
make build./echo 9001
```# apis
### /ping/
- AllowedMethods: all
- return 200 with pong```shell
$ curl -XPOST http://127.0.0.1:9001/ping/> POST /ping/ HTTP/1.1
> Host: 127.0.0.1:9001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 02 Jun 2019 00:19:19 GMT
< Content-Length: 4
< Content-Type: text/plain; charset=utf-8pong
```### /sleep/{sleep}/
- AllowedMethods: all
- will sleep for `{sleep}` ms
- return 200 with ok```shell
$ curl -XPOST http://127.0.0.1:9001/sleep/10/> POST /sleep/10/ HTTP/1.1
> Host: 127.0.0.1:9001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 02 Jun 2019 00:20:16 GMT
< Content-Length: 2
< Content-Type: text/plain; charset=utf-8ok
```and do the benchmark
```shell
$ wrk -t8 -c1000 -d10s http://127.0.0.1:9000/sleep/10/
Running 10s test @ http://127.0.0.1:9000/sleep/10/
8 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 11.84ms 18.96ms 266.92ms 91.97%
Req/Sec 8.79k 2.04k 14.77k 64.38%
699458 requests in 10.04s, 117.40MB read
Socket errors: connect 0, read 916, write 0, timeout 0
Non-2xx or 3xx responses: 699458
Requests/sec: 69640.30
Transfer/sec: 11.69MB
```### /status/{status}/
- AllowedMethods: all
- return `{status}````
$ curl -XPOST http://127.0.0.1:9001/status/500/> POST /status/500/ HTTP/1.1
> Host: 127.0.0.1:9001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 500 Internal Server Error
< Content-Type: text/plain; charset=utf-8
< X-Content-Type-Options: nosniff
< Date: Sun, 02 Jun 2019 00:21:01 GMT
< Content-Length: 22Internal Server Error
```### /echo/
- AllowedMethods: all
- return 200, with the request contents in json```shell
$ curl -XPOST http://127.0.0.1:9001/echo/\?a\=1\&b\=2> POST /echo/?a=1&b=2 HTTP/1.1
> Host: 127.0.0.1:9001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=UTF-8
< Date: Sun, 02 Jun 2019 00:17:57 GMT
< Content-Length: 140{
"body": "",
"form":
{},
"headers":
{
"Accept": ["*/*"],
"User-Agent": ["curl/7.54.0"]
},
"method": "POST",
"query":
{
"a": ["1"],
"b": ["2"]
},
"url": "/echo/"
}
```### websocket
- /ws/index/ the websocket test page
- /ws/ the websocket api, will broadcast the message to all client### file upload/download
- /file/download/{size}/ the size unit is KB
```shell
$ curl -XGET http://127.0.0.1:9001/file/download/1024/ -vv > a.txt> GET /file/download/1024/ HTTP/1.1
> Host: 127.0.0.1:3000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Content-Control: private, no-transform, no-store, must-revalidate
< Content-Disposition: attachment; filename=data.txt
< Content-Length: 1048576
< Content-Transfer-Encoding: binary
< Content-Type: text/plain; charset=utf-8
< Expires: 0
< Last-Modified: Tue, 02 Jul 2019 08:23:20 GMT
< Date: Tue, 02 Jul 2019 08:23:20 GMT$ du -h a.txt
1M
```- /file/upload/{filename}/
```
$ curl -XPOST \
'http://127.0.0.1:9001/file/upload/data.txt/' \
-H 'Content-Type: multipart/form-data' \
-F data.txt=@/Downloads/data.txt -v> POST /file/upload/data.txt/ HTTP/1.1
> Host: 127.0.0.1:3000
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 10430
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------1fb40c77823315c2
>
< HTTP/1.1 100 Continue
< HTTP/1.1 204 No Content
< Date: Tue, 02 Jul 2019 08:25:48 GMT
```# TODO
- [ ] httpbin apis