https://dhuan.github.io/mock/latest/examples.html
[ ] [ ] Skip to content
mock documentation
mock documentation
[ ]
* Installation
* Changelog
User Guide:
* Creating APIs[ ]
+ Getting started
+ Route Parameters
+ Mock Variables
+ Responses from Shell scripts
+ Shell Utilities
+ Serving static files
+ Conditional Response
+ Reading Environment Variables
+ Middlewares
+ Base APIs
* Test Assertions[ ]
+ Assertion Chaining
+ Test Assertions with mock's Go package
* Mock API Reference
* Command-line Options Reference
* Conditions Reference
* How-tos & Examples
Miscellaneous:
* Handling CORS
Back to top
View this page
How-tos & ExamplesP
Delaying specific endpointsP
Making an existing API slow can be easily accomplished combining
mock's Base APIs and the delay option.
$ mock serve -p 8000 --base example.com --delay 2000
You may want however to make a specific endpoint slow instead of the
whole API. This can be achieved using middlewares:
$ mock serve -p 8000 --base example.com --middleware '
if [ "${MOCK_REQUEST_ENDPOINT}" = "some/endpoint" ]
then
sleep 2 # wait two seconds
fi
'
With that last example, our API at localhost:8000 will act as a proxy
to example.com. All requests will be responded immediately except
some/endpoint which will have a delay of 2 seconds.
An API powered by multiple languagesP
$ mock serve -p 3000 \
--route js \
--exec '
node <
EOF
'
Let's test it:
$ curl localhost:3000/js
# Prints out: Hello from Node.js!
$ curl localhost:3000/python
# Prints out: Hello from Python!
$ curl localhost:3000/php
# Prints out: Hello from PHP!
A stateful APIP
$ export TMP=$(mktemp)
$ printf "0" > "${TMP}"
$ mock serve -p 3000 \
--route '/hello' \
--exec '
printf "%s + 1\n" "$(cat ${TMP})" | bc | sponge "${TMP}"
printf "This server has received %s request(s) so far." "$(cat '"${TMP}"')" | mock write
'
Let's test it:
$ curl localhost:3000/hello
# Prints out: This server has received 1 request(s) so far.
$ curl localhost:3000/hello
# Prints out: This server has received 2 request(s) so far.
$ curl localhost:3000/hello
# Prints out: This server has received 3 request(s) so far.
A CRUD API with a simple data storageP
The following API does two tasks: add users and fetch users.
Warning
To run this example, you'll need to have jq installed, as the "/
users" endpoint uses it for parsing.
$ export DATA_DIR=$(mktemp -d)
$ mock serve -p 3000 \
--route 'user' \
--method POST \
--exec '
# Insert a new user
USER_NAME=$(mock get-payload name)
USER_EMAIL=$(mock get-payload email)
USER_COUNT=$(ls $DATA_DIR | wc -l)
NEW_USER_ID="$(printf "%s + 1\n" "${USER_COUNT}" | bc)"
printf "New user ID generated: %s\n" "${NEW_USER_ID}"
printf '"'"'{"name":"%s","email":"%s"}'"'"' "${USER_NAME}" "${USER_EMAIL}" > "${DATA_DIR}/${NEW_USER_ID}.json"
printf '"'"'{"id":"%s"}'"'"' "${NEW_USER_ID}" | mock write
' \
--route 'user/{user_id}' \
--exec '
# Get an existing user
USER_ID="$(mock get-route-param user_id)"
USER_FILE="${DATA_DIR}/${USER_ID}.json"
if [ ! -f "${USER_FILE}" ]
then
mock set-status 400
exit 0
fi
mock write < "${USER_FILE}"
' \
--route 'users' \
--exec '
# Gets ALL users
cat $DATA_DIR/*.json | jq -s | mock write
'
Let's now test it:
$ curl -X POST localhost:3000/user \
-H 'Content-Type: application/json' \
-d @- <