Metadata API
Механизм метаданных позволяет исследовать структуру сущностей и отношения между ними в Jmix. Для этого используются операции REST API, начинающиеся с /metadata.
Metadata API состоит из следующих конечных точек:
- 
Entity Metadata предоставляет информацию о сущностях и их сущностей. 
- 
Fetch Plans предоставляет информацию о доступных фетч-планах. 
- 
Enum Values предоставляет информацию о доступных перечислениях и их возможных значениях. 
Метаданные объекта
Entity Metadata API состоит из двух операций получения информации об атрибутах сущности:
- /metadata/entities
- 
Описание метаданных для всех сущностей 
- /metadata/entities/:entityName
- 
Описание метаданных данной сущности 
GET http://localhost:8080/rest
            /metadata
            /entities
            /rstex11_Order{
  "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:
GET http://localhost:8080/rest
            /metadata
            /entities
            /rstex11_Order
            /fetchPlans[
  {
    "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:
GET http://localhost:8080/rest
            /metadata
            /enums
            /rest.sample.entity.CustomerType{
  "name": "rest.sample.entity.CustomerType",
  "values": [
    {
      "name": "BUSINESS",
      "id": "BUSINESS",
      "caption": "Business"
    },
    {
      "name": "PRIVATE",
      "id": "PRIVATE",
      "caption": "Private"
    }
  ]
}