“repo” is a hosted platform for data storing and information collaboration.
Data can be stored at the lowest level as an entity. Entities can then be bundled into domains and subdomains.
Loosely coupled data structures can be formed to add a semantic layer on top of the entities.
- Adaptive multi content REST API. At its core is an API that can store and serve objects of any content type
- Transform layer. This can transform data into a format different to how it's stored i.e. markdown to HTML
- Data store. This is the main object store. Exposed via an interface it can have different implementations depending on requirements. e.g. MongoDB, FS, in-memory
- Data and meta data (model) will be stored as entities
- Extensible, loosely coupled entities
- Entities can be of different
types, which directly relates to it’s default HTTPContent Type Content Negotiationwill be used to chooseContent Type- Default UIs are stored as data entities
- All types can inherit, with lowest level item overriding duplicates (see types)
- Pricing model options:
- Free for low storage / bandwidth, pay for higher usages
- Free for public data, pay for private
domainmaps to URL subdomain:http://{domain}.repo.io- PaaS / BaaS
- Whole platform can run locally and sync to hosted service
- Implicit model generation
- Powerful query API / language (traversals, associations etc)
- Default use cases for platform
- http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
- http://en.wikipedia.org/wiki/Sparse_matrix
EntityModelAssociationRestrictionUserDomainSubdomain
http://{domain}.repo.io/{entity}http://{domain}.repo.io/{entity}/{version}http://{domain}.repo.io/{subdomain}/{entity}http://{domain}.repo.io/{subdomain}/{entity}/{version}
http://{domain}.repo.io/typeshttp://{domain}.repo.io/types/{name}
http://{domain}.repo.io/<data>/(<query>)http://{domain}.repo.io/<data>/<id>/<association>/(<query>)http://{domain}.repo.io/<data>/(<query>)/<association>http://{domain}.repo.io/<data>/<id>|(<query>)/<association>/(<query>)/<association>/...
Where queries apply to the left hand block. Also sort/filter parameters can be applied via querystrings.
“model:” {
“name”: “text”,
“description”: “text”,
“short”: “text”,
“attributes”: [],
“associations”: []
}
“attribute”: {
“name”: “text”,
“description”: “text”,
“short”: “text”,
“type”: “text”
}
“association”: {
“name”: “text”,
“description”: “text”,
“short”: “text”,
“forwardName”: “text”,
“reverseName”: “text”
}
An example webapp
Tests
mvn clean test
Coverage
mvn clean cobertura:cobertura
mvn clean jetty:run

