Table of Contents

Validating XML and JSON API schemas

NetYCE supports its API's using two methods. The original implementation used strictly XML payloads supporting http 'post' or ip-socket based transactions over port 8888.

As of version 7.0, NetYCE extended its internal JSON API (for the web front-end) to include the API calls of the original implementation. The JSON based interface used port 8080 and also solely supports http 'posts'. It will use JSON formatted payloads by default, but will accept XML formatted requests as well. The responses likewise can be requested to be XML formatted as well.

XML

Validate request

The following xsd can be used to validate requests:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:complexType name="head">
    <xs:attribute name="passwd" type="xs:string" use="required"/>
    <xs:attribute name="task_name" type="xs:string" use="required"/>
    <xs:attribute name="task_type" type="xs:string" use="required"/>
    <xs:attribute name="userid" type="xs:string" use="required"/>
    <xs:attribute name="error" type="xs:string"/>
    <xs:attribute name="req_app" type="xs:string"/>
    <xs:attribute name="req_host" type="xs:string"/>
    <xs:attribute name="status" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="ext_attr">
    <xs:attribute name="rfc" type="xs:string"/>
    <xs:attribute name="CI" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="host">
    <xs:sequence>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="ext_attr" type="ext_attr"/>
      </xs:sequence>
      <xs:element name="subnet_addr" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="comment" type="xs:string" use="required"/>
    <xs:attribute name="host_domain" type="xs:string" use="required"/>
    <xs:attribute name="host_name" type="xs:string" use="required"/>
    <xs:attribute name="record_type" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="request" mixed="true">
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:choice>
        <xs:element name="host" type="host"/>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="custom" type="custom"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="action_type" type="xs:string"/>
    <xs:attribute name="client_type" type="xs:string"/>
    <xs:attribute name="service_class" type="xs:string"/>
    <xs:attribute name="service_task" type="xs:string"/>
    <xs:attribute name="service_type" type="xs:string"/>
    <xs:attribute name="servername" type="xs:string"/>
    <xs:attribute name="action" type="xs:string"/>
    <xs:attribute name="command" type="xs:string"/>
    <xs:attribute name="detail" type="xs:string"/>
    <xs:attribute name="nodename" type="xs:string"/>
    <xs:attribute name="filename" type="xs:string"/>
  </xs:complexType>
  <xs:element name="task" type="task"/>
  <xs:complexType name="task">
    <xs:sequence>
      <xs:element name="head" type="head"/>
      <xs:element name="request" type="request"/>
    </xs:sequence>
    <xs:attribute name="response" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="custom">
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="type" type="xs:string" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
  </xs:complexType>
</xs:schema>

Validate response

The following xsd can be used to validate responses

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:complexType name="head">
    <xs:attribute name="error" type="xs:string" use="required"/>
    <xs:attribute name="passwd" type="xs:string" use="required"/>
    <xs:attribute name="req_host" type="xs:string" use="required"/>
    <xs:attribute name="status" type="xs:string" use="required"/>
    <xs:attribute name="task_id" type="xs:string" use="required"/>
    <xs:attribute name="task_name" type="xs:string" use="required"/>
    <xs:attribute name="task_type" type="xs:string" use="required"/>
    <xs:attribute name="userid" type="xs:string" use="required"/>
    <xs:attribute name="req_app" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="ext_attr">
    <xs:attribute name="rfc" type="xs:string"/>
    <xs:attribute name="CI" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="host">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="ext_attr" type="ext_attr"/>
    </xs:sequence>
    <xs:attribute name="comment" type="xs:string" use="required"/>
    <xs:attribute name="host_domain" type="xs:string" use="required"/>
    <xs:attribute name="host_name" type="xs:string" use="required"/>
    <xs:attribute name="record_type" type="xs:string" use="required"/>
    <xs:attribute name="subnet_addr" type="xs:string"/>
    <xs:attribute name="disable" type="xs:string"/>
    <xs:attribute name="host_fqdn" type="xs:string"/>
    <xs:attribute name="ib_status" type="xs:string"/>
    <xs:attribute name="ib_status_msg" type="xs:string"/>
    <xs:attribute name="new_ip_addr" type="xs:string"/>
    <xs:attribute name="request_id" type="xs:string"/>
    <xs:attribute name="ttl" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="request">
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:choice>
        <xs:element name="host" type="host"/>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="custom" type="custom"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="action_type" type="xs:string"/>
    <xs:attribute name="auth_agent" type="xs:string" use="required"/>
    <xs:attribute name="task_module" type="xs:string" use="required"/>
    <xs:attribute name="task_sub" type="xs:string" use="required"/>
    <xs:attribute name="user_level" type="xs:string" use="required"/>
    <xs:attribute name="client_type" type="xs:string"/>
    <xs:attribute name="service_class" type="xs:string"/>
    <xs:attribute name="service_task" type="xs:string"/>
    <xs:attribute name="service_type" type="xs:string"/>
    <xs:attribute name="action" type="xs:string"/>
    <xs:attribute name="command" type="xs:string"/>
    <xs:attribute name="detail" type="xs:string"/>
    <xs:attribute name="servername" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="response">
    <xs:choice>
      <xs:element name="host" type="host"/>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="info" type="xs:string"/>
      </xs:sequence>
      <xs:sequence>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="alias" type="alias"/>
        </xs:sequence>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="custom" type="custom"/>
        </xs:sequence>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="log" type="xs:string"/>
        </xs:sequence>
      </xs:sequence>
    </xs:choice>
    <xs:attribute name="auth_agent" type="xs:string"/>
    <xs:attribute name="client_type" type="xs:string"/>
    <xs:attribute name="service_class" type="xs:string"/>
    <xs:attribute name="service_task" type="xs:string"/>
    <xs:attribute name="service_type" type="xs:string"/>
    <xs:attribute name="task_module" type="xs:string"/>
    <xs:attribute name="task_sub" type="xs:string"/>
    <xs:attribute name="user_level" type="xs:string"/>
    <xs:attribute name="servername" type="xs:string"/>
  </xs:complexType>
  <xs:element name="task" type="task"/>
  <xs:complexType name="task">
    <xs:sequence>
      <xs:element name="head" type="head"/>
      <xs:element name="request" type="request"/>
      <xs:element name="response" type="response"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="custom">
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="type" type="xs:string" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="alias">
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="type" type="xs:string" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
  </xs:complexType>
</xs:schema>

JSON

Validating request

The following JSON schema can be used to validate requests

  "definitions": {
    "custom": {
      "properties": {
        "name": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "type",
        "value"
      ],
      "type": "object"
    },
    "task": {
      "properties": {
        "response": {
          "type": "string"
        },
        "head": {
          "$ref": "#/definitions/head"
        },
        "request": {
          "$ref": "#/definitions/request"
        }
      },
      "required": [
        "head",
        "request"
      ],
      "type": "object"
    },
    "requestCHOICE0": {
      "properties": {
        "action_type": {
          "type": "string"
        },
        "custom": {
          "$ref": "#/definitions/custom"
        },
        "client_type": {
          "type": "string"
        },
        "service_class": {
          "type": "string"
        },
        "service_task": {
          "type": "string"
        },
        "service_type": {
          "type": "string"
        },
        "servername": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "command": {
          "type": "string"
        },
        "detail": {
          "type": "string"
        },
        "nodename": {
          "type": "string"
        },
        "filename": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "host": {
      "properties": {
        "comment": {
          "type": "string"
        },
        "subnet_addr": {
          "type": "string"
        },
        "host_domain": {
          "type": "string"
        },
        "host_name": {
          "type": "string"
        },
        "record_type": {
          "type": "string"
        }
      },
      "required": [
        "comment",
        "host_domain",
        "host_name",
        "record_type",
        "subnet_addr"
      ],
      "type": "object"
    },
    "ext_attr": {
      "properties": {
        "rfc": {
          "type": "string"
        },
        "CI": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "head": {
      "properties": {
        "passwd": {
          "type": "string"
        },
        "task_name": {
          "type": "string"
        },
        "task_type": {
          "type": "string"
        },
        "userid": {
          "type": "string"
        },
        "error": {
          "type": "string"
        },
        "req_app": {
          "type": "string"
        },
        "req_host": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      },
      "required": [
        "passwd",
        "task_name",
        "task_type",
        "userid"
      ],
      "type": "object"
    },
    "request": {
      "anyOf": [
        {
          "$ref": "#/definitions/requestCHOICE0"
        }
      ]
    }
  },
  "$ref": "#/definitions/task"
}

Validating response

The following JSON schema can be used to validate requests

{
    "custom": {
      "properties": {
        "name": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "type",
        "value"
      ],
      "type": "object"
    },
    "task": {
      "properties": {
        "response": {
          "type": "string"
        },

        "head": {
          "$ref": "#/definitions/head"
        },
        "request": {
          "$ref": "#/definitions/request"
        }
      },
      "required": [
        "response",
        "head",
        "request"
      ],
      "type": "object"
    },
    "requestCHOICE0": {
      "properties": {
        "action_type": {
          "type": "string"
        },
        "custom": {
          "$ref": "#/definitions/custom"
        },
        "client_type": {
          "type": "string"
        },
        "service_class": {
          "type": "string"
        },
        "service_task": {
          "type": "string"
        },
        "service_type": {
          "type": "string"
        },
        "servername": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "command": {
          "type": "string"
        },
        "detail": {
          "type": "string"
        },
        "nodename": {
          "type": "string"
        },
        "filename": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "custom"
      ]
    },
    "host": {
      "properties": {
        "comment": {
          "type": "string"
        },
        "subnet_addr": {
          "type": "string"
        },
        "host_domain": {
          "type": "string"
        },
        "host_name": {
          "type": "string"
        },
        "record_type": {
          "type": "string"
        }
      },
      "required": [
        "comment",
        "host_domain",
        "host_name",
        "record_type",
        "subnet_addr"
      ],
      "type": "object"
    },
    "ext_attr": {
      "properties": {
        "rfc": {
          "type": "string"
        },
        "CI": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "head": {
      "properties": {
        "passwd": {
          "type": "string"
        },
        "task_name": {
          "type": "string"
        },
        "task_type": {
          "type": "string"
        },
        "userid": {
          "type": "string"
        },
        "error": {
          "type": "string"
        },
        "req_app": {
          "type": "string"
        },
        "req_host": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      },
      "required": [
        "passwd",
        "task_name",
        "task_type",
        "userid"
      ],
      "type": "object"
    },
    "request": {
      "anyOf": [
        {
          "$ref": "#/definitions/requestCHOICE0"
        }
      ]
    }

}