Skip to content

Commit da04c59

Browse files
authored
Update variants API guidelines (#4617)
1 parent 6463965 commit da04c59

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

api-design-guidelines/data-modelling.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ Or better yet, to completely avoid using dynamic keys the user-defined value can
150150

151151
### Model object variants in a consumable way
152152

153-
Sometimes an API accepts an object but the keys are determined by what "kind/variant" of the object is intended. An example of this is aggregations, queries, and pipeline steps. There are two ways the Elasticsearch API handles this situation. The first method is using an **internal variant type** property like "type" with analyzers:
153+
Sometimes an API accepts an object but the keys are determined by what "kind/variant" of the object is intended. An example of this is aggregations, queries, and pipeline steps. There are two ways the Elasticsearch API handles this situation. The first method is using **internal tagging** with property like "type" with analyzers:
154154

155155
```yaml
156156
{
@@ -159,7 +159,7 @@ Sometimes an API accepts an object but the keys are determined by what "kind/var
159159
}
160160
```
161161

162-
The second is using **external variants** where the inner object is wrapped with an object with a single key containing the kind of the inner object. This example changes the analyzer from above to use an external variant:
162+
The second is using **external tagging** where the inner object is wrapped with an object with a single key containing the kind of the inner object. This example changes the analyzer from above to use an external variant:
163163

164164
```yaml
165165
{
@@ -169,7 +169,7 @@ The second is using **external variants** where the inner object is wrapped with
169169
}
170170
```
171171

172-
When choosing between these two possibilities **favor using external variants** as it removes the requirement to buffer key-value pairs until the internal variant property is found. Using external variants also improves traversability of the API (ie auto-complete) as properties can be anticipated without waiting for the discriminant property.
172+
Internal tagging is a common way to identify variants and should usually be preferred. However, it may have performance implications when used to deserialize large objects in strongly-typed languages. In that case, external tagging should be considered instead, as it removes the requirement to buffer key-value pairs until the internal variant property is found. Using external tagging also improves traversability of the API (ie auto-complete) as properties can be anticipated without waiting for the discriminant property.
173173

174174
## Model enumerations in a portable way
175175

0 commit comments

Comments
 (0)