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 @- <