Metadata API

Механизм метаданных позволяет исследовать структуру сущностей и отношения между ними в Jmix. Для этого используются операции REST API, начинающиеся с /metadata.

Metadata API состоит из следующих конечных точек:

  • Entity Metadata предоставляет информацию о сущностях и их сущностей.

  • Fetch Plans предоставляет информацию о доступных фетч-планах.

  • Enum Values предоставляет информацию о доступных перечислениях и их возможных значениях.

Метаданные объекта

Entity Metadata API состоит из двух операций получения информации об атрибутах сущности:

/metadata/entities

Описание метаданных для всех сущностей

/metadata/entities/:entityName

Описание метаданных данной сущности

Order Entity Metadata Request
GET http://localhost:8080/rest
            /metadata
            /entities
            /rstex11_Order
Response: 200 - OK
{
  "entityName": "rstex11_Order",
  "ancestor": null,
  "properties": [
    {
      "name": "date",
      "attributeType": "DATATYPE",
      "type": "localDate",
      "cardinality": "NONE",
      "mandatory": true,
      "readOnly": false,
      "description": "Date",
      "persistent": true,
      "transient": false
    },
    {
      "name": "amount",
      "attributeType": "DATATYPE",
      "type": "decimal",
      "cardinality": "NONE",
      "mandatory": true,
      "readOnly": false,
      "description": "Amount",
      "persistent": true,
      "transient": false
    },
    {
      "name": "id",
      "attributeType": "DATATYPE",
      "type": "uuid",
      "cardinality": "NONE",
      "mandatory": true,
      "readOnly": false,
      "description": "Id",
      "persistent": true,
      "transient": false
    },
    {
      "name": "lines",
      "attributeType": "COMPOSITION",
      "type": "rstex11_OrderLine",
      "cardinality": "ONE_TO_MANY",
      "mandatory": false,
      "readOnly": false,
      "description": "Lines",
      "persistent": true,
      "transient": false
    },
    {
      "name": "customer",
      "attributeType": "ASSOCIATION",
      "type": "rstex11_Customer",
      "cardinality": "MANY_TO_ONE",
      "mandatory": true,
      "readOnly": false,
      "description": "Customer",
      "persistent": true,
      "transient": false
    }
  ]
}

Фетч-планы

Fetch Plan Metadata API предоставляет информацию о структуре доступных фетч-планов для данной сущности. Он состоит из двух операций:

/metadata/entities/:entityName/fetchPlans

Все доступные фетч-планы данной сущности

/metadata/entities/:entityName/fetchPlans/:fetchPlanName

Информация о конкретном фетч-плане

В следующем примере запрашиваются все фетч-планы для сущности rstex11_Order:

Available Order Fetch Plans Request
GET http://localhost:8080/rest
            /metadata
            /entities
            /rstex11_Order
            /fetchPlans
Response: 200 - OK
[
  {
    "name": "order-with-details",
    "entity": "rstex11_Order",
    "properties": [
      "date",
      "amount",
      "createdDate",
      "createdBy",
      "lastModifiedDate",
      "deletedDate",
      "lastModifiedBy",
      "id",
      "version",
      "deletedBy",
      "customer",
      {
        "name": "lines",
        "fetchPlan": {
          "name": "_base",
          "properties": [
            "quantity",
            "createdDate",
            "createdBy",
            "lastModifiedDate",
            "deletedDate",
            "lastModifiedBy",
            "id",
            "version",
            "deletedBy",
            {
              "name": "product",
              "fetchPlan": {
                "name": "_instance_name",
                "properties": [
                  "name"
                ]
              }
            }
          ]
        }
      }
    ]
  }
]

Значения перечислений

Enum Metadata API предоставляет информацию о возможных значениях перечислений.

/metadata/enums

Имена и значения всех перечислений

/metadata/enums/:enumClassName

Имена и значения конкретного перечисления

Параметр :enumClassName должен содержать полное имя класса перечисления. Например, rest.sample.entity.CustomerType вместо просто CustomerType.

В следующем примере запрашивается информация о перечислении rest.sample.entity.CustomerType:

Enum Values Request
GET http://localhost:8080/rest
            /metadata
            /enums
            /rest.sample.entity.CustomerType
Response: 200 - OK
{
  "name": "rest.sample.entity.CustomerType",
  "values": [
    {
      "name": "BUSINESS",
      "id": "BUSINESS",
      "caption": "Business"
    },
    {
      "name": "PRIVATE",
      "id": "PRIVATE",
      "caption": "Private"
    }
  ]
}