- multiple interfaces not supported in grammar
Today multi-service architectures requires developers to keep in sync a lot of different services built in different languages by different teams. To do this manually requires a lot of work always changing the shared object types between different projects and a lot of integration tests to make sure that all the services can communicate. With skema you can have one single source of truth for your most important shared types and can generate the validation (jsonschema) and the code to serialize them and be sure the different services can communicate.
- jsonschema
- python
- graphql
using quicktype
- python
- typescript
- go
- rust
- c++ ...
Requires python 3.6+ and npm
pip install skema
npm i -g quicktype # for more languages
skema generate ./schema.skema --jsonschema ./your_path.json
skema generate ./schema.skema --graphql ./your_path.graphql
skema generate ./schema.skema --typescript ./your_path.graphql
# using an hosted skema
skema generate "https://gist.github.com/your_gist" --typescript ./your_path.graphql
User:
id: Int
name: Str
address:
street: Str
number: Int
state: Str
credit: Float
email: /.*@.*\.com/
Pet:
name: Str
friends: [Pet] # you can reference other types
Owner:
full_name: Str
hobbies: [
name: Str
when: CronString
]
CronString: Str
Animal: Tiger | Bear | Panthera
Panthera:
_id: ObjectId # a type alias
black_nuance: "super_dark" | "dark" | "light" # enumeration
Tiger:
_id: ObjectId
humans_killed: Int
Bear:
_id: ObjectId
likes_honey: Bool
ObjectId: Any
Centaur: Horse & Human
Horse:
name: Str
eats: ["carrots" | "weeds"]
Human:
name: Str
surname: Str
eats: ["meat" | "vegetables"]
- Int
- Float
- Str
- Bool
- null
- "literal string"
- /regex/
- 0..69
- Any
- Validate json input
- Generare code types for every language in your architecture (graphql, py, ts, cpp, ...)
- Generate fake data based on your schema
- Infer schema from raw json (perfect for reverse engineering)
- convert jsonschema to be easier to read
- use it for API types documentation
- Generate react forms, via [
react-skema-forms
] - use it to plan your domain model!
- all root properties are references and can be used as types
- types can be object whose properties are expressed as key: value or other primitive types like
- Str,
- Int,
- Bool,
- Float
- /regex/
- 0..100 (int range)
- .0..1 (float range)
- type inside [ ] is an array type
- types can be mixed together:
Str | Int
means one of string and intObject1 & Object2
means "all the properties of object 1 and 2"Object1 | Object2
means "properties of object 1 and 2"
- types can be annotated writing annotations """ quotes above the definition
- additional propertiescan be specified adding ... at the end of an object and can be better shaped treating it like a normal key, ...: Str means additional properties must be Str