Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/emicklei/mora
MongoDB generic REST server in Go
https://github.com/emicklei/mora
Last synced: 20 days ago
JSON representation
MongoDB generic REST server in Go
- Host: GitHub
- URL: https://github.com/emicklei/mora
- Owner: emicklei
- Created: 2013-07-12T09:07:01.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-04-23T10:20:32.000Z (8 months ago)
- Last Synced: 2024-11-14T00:05:07.330Z (29 days ago)
- Language: Go
- Homepage:
- Size: 1.61 MB
- Stars: 315
- Watchers: 27
- Forks: 55
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-ccamel - emicklei/mora - MongoDB generic REST server in Go (Go)
- awesome-cobol - Mora - REST server for accessing MoncobolDB documents and meta data (Utilities / Middlewares)
- awesome-go - mora - MongoDB generic REST server in Go - ★ 253 (Software Packages)
- awesome-go-extra - mora - 07-12T09:07:01Z|2021-04-11T12:45:54Z| (Go Tools / DevOps Tools)
README
# ![](static/Letter-M-icon.png) Mora - Mongo Rest API
#### REST server for accessing MongoDB documents and meta data
##### DocumentsWhen querying on collections those parameters are available:
query - use mongo shell syntax, e.g. {"size":42}
limit - maximum number of documents in the result
skip - offset in the result set
fields - comma separated list of (path-dotted) field names
sort - comma separated list of (path-dotted) field names
extended_json - set to "true" to return responses in [MongoDB Extended JSON](http://docs.mongodb.org/manual/reference/mongodb-extended-json/) format##### Examples
###### Listing aliases
$ curl 'http://127.0.0.1:8181/docs/' \
> -D - \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:06:30 GMT
Content-Length: 61{
"success": true,
"data": [
"test",
"local"
]
}###### Listing databases
$ curl 'http://127.0.0.1:8181/docs/local/' \
> -D - \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:07:11 GMT
Content-Length: 61{
"success": true,
"data": [
"local",
"use1"
]
}###### Listing collections
$ curl 'http://127.0.0.1:8181/docs/local/local' \
> -D - \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:24:10 GMT
Content-Length: 98{
"success": true,
"data": [
"new-collection",
"startup_log",
"system.indexes"
]
}###### Inserting document
$ curl 'http://127.0.0.1:8181/docs/local/local/new-collection/document-id' \
-D - \
-X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
--data '{"title": "Some title", "content": "document content"}'
HTTP/1.1 201 Created
Content-Location: /docs/local/local/new-collection/document-id
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:23:33 GMT
Content-Length: 116{
"success": true,
"data": {
"created": true,
"url": "/docs/local/local/new-collection/document-id"
}
}###### Finding document
$ curl 'http://127.0.0.1:8181/docs/local/local/new-collection/document-id' \
> -D - \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:32:33 GMT
Content-Length: 123{
"success": true,
"data": {
"_id": "document-id",
"content": "document content",
"title": "Some title"
}
}###### Finding documents
$ curl 'http://127.0.0.1:8181/docs/local/local/new-collection?limit=1&skip=1' \
> -D - \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 23 Apr 2014 23:18:39 GMT
Content-Length: 387{
"success": true,
"prev_url": "/docs/local/local/new-collection?limit=1\u0026skip=0",
"next_url": "/docs/local/local/new-collection?limit=1\u0026skip=2",
"data": [
{
"_id": "535849cfb734f91cdc000002",
"content": "document content",
"title": "Some title"
}
]
}###### Updating document
$ curl 'http://127.0.0.1:8181/docs/local/database/new-collection/document-id' \
> -D - \
> -X PUT \
> -H 'Content-Type: application/json' \
> -H 'Accept: application/json' \
> --data '{"title": "New title"}'
HTTP/1.1 200 OK
Content-Location: /docs/local/database/new-collection/document-id
Content-Type: application/json
Date: Tue, 22 Apr 2014 06:37:02 GMT
Content-Length: 133{
"success": true,
"data": {
"created": false,
"url": "/docs/local/database/new-collection/document-id"
}
}###### Updating documents
$ curl 'http://127.0.0.1:8181/docs/local/local/new-collection' \
> -D - \
> -X PUT \
> -H 'Content-Type: application/json' \
> -H 'Accept: application/json' \
> --data '{"$set": {"title": "New title"}}'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 23 Apr 2014 23:33:11 GMT
Content-Length: 22{
"success": true
}###### Removing document
$ curl 'http://127.0.0.1:8181/docs/local/local/new-collection/document-id' \
> -D - \
> -X DELETE \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:42:47 GMT
Content-Length: 22{
"success": true
}###### Removing collection
$ curl 'http://127.0.0.1:8181/docs/local/local/new-collection' \
> -D - \
> -X DELETE \
> -H 'Accept: application/json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 07:43:24 GMT
Content-Length: 22{
"success": true
}##### Statistics
###### Database statistics
$ curl http://127.0.0.1:8181/stats/local/local -D -
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 08:17:46 GMT
Content-Length: 341{
"success": true,
"data": {
"avgObjSize": 595.6,
"collections": 3,
"dataFileVersion": {
"major": 4,
"minor": 5
},
"dataSize": 5956,
"db": "local",
"fileSize": 67108864,
"indexSize": 0,
"indexes": 0,
"nsSizeMB": 16,
"numExtents": 3,
"objects": 10,
"ok": 1,
"storageSize": 10502144
}
}###### Collection statistics
$ curl http://127.0.0.1:8181/stats/local/local/startup_log -D -
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 22 Apr 2014 08:18:16 GMT
Content-Length: 389{
"success": true,
"data": {
"avgObjSize": 728,
"capped": true,
"count": 8,
"indexSizes": {},
"lastExtentSize": 10485760,
"max": 9223372036854775807,
"nindexes": 0,
"ns": "local.startup_log",
"numExtents": 1,
"ok": 1,
"paddingFactor": 1,
"size": 5824,
"storageSize": 10485760,
"systemFlags": 0,
"totalIndexSize": 0,
"userFlags": 0
}
}### Install from source
go get -u github.com/emicklei/mora
### Create a release
sh release.sh### Configuration
Mora uses a simple properties file to specify host,port,aliases and other options
# listener info is required
http.server.host=localhost
http.server.port=8181
# enable cross site requests
http.server.cors=true# for swagger support (optional)
swagger.path=/apidocs/
swagger.file.path=./swagger-ui/dist# mongo instances are listed here; specify an alias for each
mongod.{alias}.host=localhost
mongod.{alias}.port=27017
# initial and operational timeout in seconds
mongod.{alias}.timeout=5
# optional authentication
mongod.{alias}.username=
mongod.{alias}.password=
mongod.{alias}.database=
# read preference mode
# supported options (case-insensitive): https://godoc.org/gopkg.in/mgo.v2#Mode
mongod.{alias}.mode=primary
# alternatively, a mongodb connection string uri can be used instead
# supported options: https://godoc.org/gopkg.in/mgo.v2#Dial
mongod.{alias}.uri=mongodb://myuser:mypass@localhost:40001,otherhost:40001/mydb# enable /stats/ endpoint
mora.statistics.enable=true### Run
$ mora -config mora.properties
### Swagger
Swagger UI is displaying automatically generated API documentation and playground.
![Swagger UI](https://s3.amazonaws.com/public.philemonworks.com/mora/mora-2013-08-04.png)
© 2013, http://ernestmicklei.com. MIT License
- Icons from http://www.iconarchive.com, CC Attribution 3.0
- Swagger from https://github.com/wordnik/swagger-core/wiki, Apache License, Version 2.0