This application is a suite of HTTP unit tests to validate the structure and behaviour of the Vapor Notes API.
It was created as part of the Vapor workshop in Swift Alps 2017.
A possible implementation of the API is available in the VaporNotes project.
This project is a standard Swift 4 package. It has a
Makefile to simplify some tasks:
makewill build the application and the documentation.
make buildwill build the application, downloading the dependencies if required.
make docwill create the documentation using Jazzy.
make xcodewill create an Xcode project.
make runwill run the debug version of the application against
You can run the project against any other URL:
The Vapor Notes API has the following characteristics:
- The API receive a "ping" to verify that the network connection is working.
- Anyone can create a new user in the system.
- Logged-in users can create notes.
- Notes are identified using UUIDs, like
C26A187A-64C7-41A6-A367-ADCC1F5A6F19; this would allow offline systems such as disconnected mobile applications or other devices to create notes independently of the server.
- Notes contain Markdown text.
- Users can get all of their notes.
- Users can get one single note.
- Users can edit a single note.
- Users can delete a single note.
- Users can delete all notes at once.
- Users can publish a note; this gives the note a small random "slug" of text, similar to
xyz123and this slug can be used to access the note publicly, as HTML text converted from the Markdown source.
- Users can unpublish one of their notes at any time.
- Users can request a backup of their notes in ZIP format. The ZIP file contains a file per note, whose filename is the UUID of the note with the
.txtextension. Each file contains the Markdown source of the note.
- Users can search their notes for the occurrence of a string.
This script depends on the following libraries:
The slides of the presentation of the project are in Gitpitch.
To generate the documentation of this project, you need the following things:
curl requests to interact with the API, using
jq to format the output nicely:
curl http://localhost/ping --request GET
Login and save authorization token in pasteboard, for future requests:
curl http://localhost/api/v1/login --silent --user "firstname.lastname@example.org:swiftalps" --request POST | jq -r .token | pbcopy
curl http://localhost/api/v1/notes --silent --request POST --header "Authorization: Bearer SNjmXWikniZZLaed8jDG5A==" --header "Content-Type: application/json" --data @Fixtures/request_create_note.json | jq
List of notes:
curl http://localhost/api/v1/notes --silent --request GET --header "Authorization: Bearer SNjmXWikniZZLaed8jDG5A==" | jq
Search for notes:
curl http://localhost/api/v1/notes/search --silent --request POST --header "Authorization: Bearer FPG1Llqfl5Ju200ZDPb/ig==" --data @Fixtures/request_search.json --header "Content-Type: application/json" | jq
Click on the link below to see a sample run of the validator on a working copy of the API: