2. Descubrir el modelo
El $metadata es un documento CSDL que describe cada entidad: sus campos con tipo y longitud, su clave, y las relaciones con otros maestros. Sale en XML por defecto.
| Recurso | Devuelve |
|---|---|
GET / | Documento de servicio: la lista de entity sets con su título legible. |
GET /$metadata | CSDL en XML (application/xml). |
GET /$metadata?$format=json | El mismo CSDL en JSON, más cómodo de recorrer desde código. |
Cómo leer el CSDL
<EntityType Name="o_customers">
<Key>
<PropertyRef Name="code"/>
</Key>
<Property Name="code" Type="Edm.String" Nullable="false" MaxLength="20">
<Annotation Term="Core.Description" String="Código"/>
</Property>
<Property Name="city_code" Type="Edm.String" Nullable="true" MaxLength="10"/>
<NavigationProperty Name="Localidad" Type="Acqua.o_cities" Nullable="true" Partner="Clientes">
<ReferentialConstraint Property="city_code" ReferencedProperty="code"/>
</NavigationProperty>
<Annotation Term="Core.Description" String="Clientes"/>
</EntityType>
<Key>— Las propiedades que identifican una fila. Puede tener más de una: ver clave compuesta.<Property>— Un campo escalar. El nombre es la columna física de la base, no una etiqueta.MaxLength,PrecisionyScalete dicen cuánto entra.Annotation Term="Core.Description"— La etiqueta del campo en el ERP, en español. Es lo que conviene mostrarle a un usuario final; Excel y Power BI la levantan solas.<NavigationProperty>— Un maestro relacionado. SinType="Collection(...)"es una relación de muchos a uno (el cliente tiene una localidad); conCollection(...)es de uno a muchos.<ReferentialConstraint>— Qué campo local apunta a qué campo del otro maestro. Power BI usa esto para armar las relaciones del modelo automáticamente.
Capacidades declaradas
Cada entity set declara qué se puede hacer con él, así no hace falta probar y fallar:
| Anotación | Qué dice |
|---|---|
Capabilities.InsertRestrictions | Insertable: si acepta POST . |
Capabilities.UpdateRestrictions | Updatable: si acepta PATCH y PUT . |
Capabilities.DeleteRestrictions | Deletable: si acepta DELETE . |
Capabilities.ExpandRestrictions | Expandable y MaxLevels: si se puede usar $expand y hasta qué profundidad. |
Capabilities.SearchRestrictions | Searchable: si $search sirve en esta entidad. |
Capabilities.FilterFunctions | La lista exacta de funciones que acepta $filter. |
Capabilities.FilterRestrictions | NonFilterableProperties: los campos que no se pueden filtrar (ver tipos). |
nota
Solo ves lo tuyo. El $metadata se arma por cliente: las entidades que el administrador no te habilitó no aparecen, y tampoco aparecen las navegaciones hacia maestros que no tenés permitidos. Dos integradores pueden ver modelos distintos sobre la misma base.