JSight API and JSight Schema languages — you have never specified APIs and data schemas so
fast! We mean it.
2–4 times less code.
APIs and data schemas designing is 2–3 times faster.
The describing process does not detract from the design.
It is incredibly convenient to jointly design an API with the whole team in one go. No more
multiple design iterations and edits required. All you need is to share the screen between the
participants and come up with an API together right in the JSight Online
Editor.
“JSight is as much simpler than OpenAPI as Markdown is simpler than HTML. At the same time,
JSight is just as powerful.”
Constantine M., JSight CRDO.
JSight API and JSight Schema are two independent languages, while the JSight Schema
language is a part of the JSight API language.
JSight Schema language is designed to describe data schemas, regardless of the serialization
format.
JSight API language is designed to describe APIs of different standards. Currently, HTTP REST
API is supported. Other types of APIs will be supported in the future. The JSight API language uses
the JSight Schema language to describe input and output data.
You can always try the JSight API language (and JSight Schema) in the JSight Online Editor:
https://editor.jsight.io.
The JSight API language allows you to specify REST and JSON-RPC APIs with incredible speed and
convenience. More information can be found in the Quick
Tutorial or in the language
specification. Here we give examples of the same
API described using JSight API and Open API.
Pay attention to the main feature of the JSight API language. The basis for a data schema is an
example of valid data. Additional data requirements are specified in C-like comments. This
approach greatly simplifies the data schema and makes it intuitively clear. Practice shows that such
schema is very simple to create, read and edit.
JSIGHT 0.3
GET /cats // Get all cats.
200
[@cat]
GET /cats/{id} // Get a cat by its id.
200
@cat
TYPE @cat // Type “Cat”.
{
"id" : 123, // ID of the cat.
"name": "Tom" // Name of the cat.
}
Pay attention to how convenient it is to work with user types in JSight API. The type name is simply
inserted where the type should be in the data schema. Everything is the same as in conventional
programming languages.
Details that are not obvious from the example of valid data are provided in small JSON objects in
C-like comments. This approach allows you to write data schemas of any complexity, while keeping
them compact and intuitive.
JSIGHT 0.3
GET /cats // Get all cats.
200 [@cat] // Returns all cats.
POST /cats // Create a cat.
Request @cat
200 @cat // Success.
GET /cats/{id} // Get a cat by its id.
200 @cat // Returns a cat.
PUT /cats/{id} // Update a cat.
Request @cat
200 @cat // Returns an updated cat.
DELETE /cats/{id} // Delete a cat.
200 any
TYPE @cat // A cat.
{
"id" : 1,
"name" : "Tom",
"color": "black" // {enum: ["black", "white"]}
}
JSIGHT 0.3
GET /cats // Get all cats.
200 [@cat]
PASTE @errorResponses
GET /cats/{id} // Get a cat by its id.
200 @cat
PASTE @errorResponses
TYPE @cat // Type “Cat”.
{
"id" : 1,
"name": "Tom"
}
MACRO @errorResponses
400 any
401 any
405 any
500 any
Macros are a powerful feature of the JSight API language. It allows you to reuse parts of code as
many times as you like.
We did not describe this API in OpenAPI. It is too complicated and very long…
⭐ Star us on GitHub — it motivates us a lot!
JSON-RPC 2.0. New Feature!
Example 9. JSON-RPC 2.0
JSight API 0.3
OpenRPC 1.2.1
JSIGHT 0.3
URL /
Protocol json-rpc-2.0
Method listPets // List all pets
Params
[
20 // Limit (how many items to return).
]
Result
[ // An array of pets
{ // Pet
"id": 123,
"name": "Tom"
}
]
The JSON-RPC API is as simple to describe as the REST API.
The JSight Schema language allows you to describe any data structures with incredible speed and
convenience. You can read more about it in the JSight Schema Language
Specification.
The JSight Schema language is actively used by the JSight
API language, which is designed to describe API.
For more information about JSight Schema within the JSight API, see the Quick
Tutorial.
Mentioned below are examples of the same data schemas described using JSight Schema and JSON
Schema.
Example 1. The simplest
JSight Schema 0.3
JSON Schema 2020-12
{
"id" : 123, // {min: 1}
"name": "Tom"
}
Pay attention to the main feature of the JSight Schema language. The basis for a data schema is an
example of valid data. Additional data requirements are specified in C-like comments. This
approach greatly simplifies the data schema and makes it intuitively clear. Practice shows that such
schema is very simple to create, read and edit.
For details, see the JSight Schema Language Specification, in the section
“EXAMPLE”.
The JSight Schema language is especially useful when describing nested objects and arrays, which are
very common in real life. You simply give an example of a valid array or object, and add small
clarifying comments.
It is much more complicated in JSON Schema and other languages.
For details, see the JSight Schema Language Specification, sections:
JSight API language and JSight Schema language releases are versioned according to the Semantic
Versioning 2.0.0 standard:
{MAJOR version}.{MINOR version}.{PATCH version}
The releases are located in the branch main in the ./versions/JSight Schema/ and ./versions/JSight API/,
respectively. Each new specification release is published into a separate file with a version
number, for example ./versions/JSight Schema/0.3.0.md or ./versions/JSight API/0.3.0.md.
📔 Dependencies
The JSight Schema language specification does not depend on anything.
The JSight API language specification depends on the version of the JSight Schema language. This
dependency is listed in the JSight API language specification in the section
“Dependences”.
😎 Contributing
Contributing is more than just developing a language specification. You can help the project in many
ways, and we will be very happy to accept your contribution to our project.
Details of how you can help the project are described in the CONTRIBUTING.md
document.
Contributors
💬 Bugs and Feature Requests
Do you have a bug report or a feature request?
Please feel free to add a new
issue or write to us in support:
If something is unclear to you, please contact support; we try to respond within 24 hours. Moreover,
it is critical for us to understand what is unclear from the first instance.