Schemas

Schemas play an integral role in Zapp by ensuring that the data in your Specifications adhere to defined structures and rules. This section aims to provide a comprehensive guide on how to effectively utilize Schemas in your Zapp project.

What Are Schemas?

In Zapp, Schemas serve as blueprints for validating the data in your Specifications. They define the types, structure, and constraints of the data, making sure that the generated code aligns with your project's requirements. Zapp follows the JSON Schema standard for schema definitions.

Why Use Schemas?

Using Schemas in your Zapp project provides several advantages:

  • Data Validation: Ensures that the Specification data adhere to the expected format.
  • Error Handling: Allows for early detection of inconsistencies or errors in your Specifications.
  • Documentation: Acts as a form of documentation, explaining the expected data structure of your Specifications.

Defining Schemas

To define a Schema, you'll typically include it within your project's configuration files. Here's a simplified example:

export const ModelSchema = {
  type: 'object',
  additionalProperties: {
    type: 'object',
    properties: {
      required: {
        type: 'boolean',
      },
      type: {
        enum: ['boolean', 'number', 'string'],
      },
    },
  },
};

In this example, the ModelSchema defines the structure for a model object, indicating that it should be an object type and must have required and type properties of string type.

A corresponding spec might look like this:

export default ServiceZapp({
  // ...
  models: {
    user: {
      type: 'string',
    },
  },
  // ...
});

Validating Specifications with Schemas

Once you have defined your Schemas, you can use them to validate your Specifications. Zapp automatically checks the Specification against its corresponding Schema whenever a code generation task is run. If there's a mismatch, Zapp will throw an error and halt the code generation process.

Custom Schemas

You can also define custom Schemas tailored to specific use cases or complex data structures in your project. Custom Schemas allow you more control over the validation process, enabling you to define custom rules and constraints.

Best Practices

When working with Schemas, consider the following best practices:

  • Reuse Schemas: Whenever possible, reuse existing Schemas to maintain consistency and reduce duplication in your project.
  • Nested Schemas: For complex objects, consider using nested Schemas to break down the structure into more manageable components.
  • Descriptive Naming: Use descriptive names for your Schemas to indicate their purpose and content.
  • Validation: Always validate your Schemas against some test Specifications to ensure they are working as expected.

By following these best practices, you can make your Schemas more efficient, readable, and maintainable, ensuring they serve their purpose effectively in your Zapp project.