A dippy API service based on App Engine and godip.
Discussions about this project happen at https://groups.google.com/forum/#!forum/diplicity-dev.
A regularly updated service running this code is available at https://diplicity-engine.appspot.com/.
To play, either be brave and use the auto generated HTML UI at https://diplicity-engine.appspot.com/, or use one of the client projects:
The API uses a slightly tweaked HATEOAS style, but is basically JSON/REST.
To enable exploration of the API for debugging, research by UI engineers or even playing (not for the faint of heart) the API delivers a primitive HTML UI when queried with Accept: text/html
.
To enable debugging the JSON output in a browser, adding the query parameter accept=application/json
will make the server output JSON even to a browser that claims to prefer text/html
.
To run it locally
- Clone this repo.
- Install the App Engine SDK for Go.
- Make sure your
$GOPATH
is set to something reasonable, like$HOME/go
. - Run
go get -v ./...
in the root directory. - Run
dev_appserver.py .
in theapp
directory. - Run
curl -XPOST http://localhost:8080/_configure -d '{"FCMConf": {"ServerKey": SERVER_KEY_FROM_FCM}, "OAuth": {"ClientID": CLIENT_ID_FROM_GOOGLE_CLOUD_PROJECT, "Secret": SECRET_FROM_GOOGLE_CLOUD_PROJECT}, "SendGrid": {"APIKey": SEND_GRID_API_KEY}}'
.- This isn't necessary to run the server per se, but
FCMConf
is necessary for FCM message sending,OAuth
is necessary for nonfake-id
login, andSendGrid
is necessary for email sending.
- This isn't necessary to run the server per se, but
When running the server locally, you can use the query parameter fake-id
to set a fake user ID for your requests. This makes it possible and easy to test interaction between users without creating multiple Google accounts or even running multiple browsers.
When running the server locally, you can also use the query parameter fake-email
to set the fake email of the fake user ID. This makes it possible and easy to test the email notification system.
To run the tests
- Start the local server with a
--clear_datastore
to avoid pre-test clutter,--datastore_path=autotest
to avoid clobbering your manual test database, and--datastore_consistency_policy=consistent
to avoid eventual consistency. Since the tests don't wait around for consistency to be achieved, this simplifies writing the tests. Also, use--require_indexes
so that you verify all the necessary indices are present inapp/index.yaml
. If you find indices forGame
missing, update and rungo run tools/genindex.go
, for other entity types removeapp/index.yaml
, rungo run tools/genindex.go
and then run the tests without--require_indexes
to letdev_appserver.py
add missing indices as it comes across them. The reasonGame
indices are special is that they are built using composite indexes according to https://cloud.google.com/appengine/articles/indexselection.
dev_appserver.py --require_indexes --skip_sdk_update_check=true --datastore_path=autotest --clear_datastore=true --datastore_consistency_policy=consistent .
- Run
go test -v
in thediptest
directory.