Translating JSON Schemas to RAML DataTypes

Using webapi-parser and WebApi Model, it is possible to translate JSON Schemas to RAML Datatypes.

You can take a look at the complete examples for more advanced use-cases.

Quick start

To translate a JSON Schema to a RAML DataType, you can parse a JSON containing one or more JSON Schemas, then select the data type/schema using the WebApi Model and call its .toRamlDatatype() method (or property in JavaScript). The output of the method is a RAML 1.0 Library string containing the translated type. Note that the JSON Schema must be wrapped in an OAS 2.0 document.

// js
const wap = require('webapi-parser').WebApiParser
const path = require('path')

const schema = `
  {
    "$schema": "http://json-schema.org/draft-04/schema",
    "type": "object",
    "required": ["firstName", "lastName", "age"],
    "properties": {
      "firstName": {"type": "string"},
      "lastName": {"type": "string"},
      "age": {"type": "integer", "minimum": 0, "maximum": 99}
    }
  }
`

async function main () {
  const parsedSchema = {
    openapi: '2.0',
    definitions: {
      User: JSON.parse(schema)
    }
  }

  // Parse an API document string
  const model = await wap.oas20.parse(JSON.stringify(parsedSchema))

  // Type can be selected using the utility function `getDeclarationByName()`
  console.log(
    'RAML Data Type from definitions using util:\n',
    model.getDeclarationByName('User').toRamlDatatype)
}

main()
// java
package co.acme.translate;

import webapi.Oas20;
import webapi.WebApiDocument;
import amf.client.model.document.*;
import amf.client.model.domain.*;

import java.util.concurrent.ExecutionException;

public class JsonSchemaToRamlDt {
  public static void translateFromApi() throws InterruptedException, ExecutionException {
    String jsonSchema = "{\n" +
                  "\"$schema\": \"http://json-schema.org/draft-04/schema\",\n" +
                  "\"type\": \"object\",\n" +
                  "\"required\": [\"firstName\", \"lastName\", \"age\"],\n" +
                  "\"properties\": {\n" +
                    "\"firstName\": {\"type\": \"string\"},\n" +
                    "\"lastName\": {\"type\": \"string\"},\n" +
                    "\"age\": {\"type\": \"integer\", \"minimum\": 0, \"maximum\": 99}\n" +
                  "}\n" +
                "}\n";
    String oasDoc = String.format(
      "{\"openapi\": \"2.0\", \"definitions\": {\"User\": %s}",
      jsonSchema);
    WebApiDocument doc = (WebApiDocument) Oas20.parse(oasDoc).get();

    // Type can be selected using the utility function `getDeclarationByName()`
    AnyShape user1 = (AnyShape) doc.getDeclarationByName("User");
    System.out.println(
      "RAML Data Type from definitions using util:\n" +
      user1.toRamlDatatype());
  }
}

Complete examples

results matching ""

    No results matching ""