TL; DR :
1) Нет ярлыка, это не то, что GraphQL предлагает из коробки. И это не то, что я смог найти через их схему.
2) Возвращенные node
типа Searchable
не содержат свойства для type
, которое вы ищете. Но вы можете получить к нему доступ через синтаксис ... on SearchableItem
(объединение) .
Пояснение :
Для вопроса 1):
Глядя на их схему, вы видите, что их поисковый запрос имеет следующие данные типа:
search(
query: String!
entities: [SearchEntity]
mode: SearchMode
aggregations: [SearchAggregation]
page: Int
after: String
first: Int
before: String
last: Int
): SearchableConnection
Запрос принимает свойство entities
типа SearchEntity
, которое выглядит следующим образом:
enum SearchEntity {
ARTIST
ARTWORK
ARTICLE
CITY
COLLECTION
FAIR
FEATURE
GALLERY
GENE
INSTITUTION
PROFILE
SALE
SHOW
TAG
}
В зависимости от вашего варианта использования, если вы строите этот запрос с помощью некоторого кода, вы можете узнать, какие значения SearchEntity
они имеют:
{
__type(name: "SearchEntity") {
name
enumValues {
name
}
}
}
Какие возвращает:
{
"data": {
"__type": {
"name": "SearchEntity",
"enumValues": [
{
"name": "ARTIST"
},
{
"name": "ARTWORK"
},
...
}
}
}
, затем сохраняет их в массиве, пропускает кавычки из перечисления и передает массив обратно в исходный запрос в качестве аргумента.
Что-то вроде этого:
query search($entities: [SearchEntity]) {
search(query: "Berlin", first: 100, page: 1, entities: $entities) {
edges {
node {
displayLabel
imageUrl
href
}
}
}
}
и в разделе переменных вашего запроса вам просто нужно добавить:
{
"entities": [ARTIST, ARTWORK, ...]
}
Что касается вопроса 2)
Сам запрос возвращает объект SearchableConnection
.
type SearchableConnection {
pageInfo: PageInfo!
edges: [SearchableEdge]
pageCursors: PageCursors
totalCount: Int
aggregations: [SearchAggregationResults]
}
Копая глубже, мы видим, что у них есть edges
, типа SearchableEdge
- это то, что вы запрашиваете.
type SearchableEdge {
node: Searchable
cursor: String!
}
и, наконец, node
типа Searchable
, который содержит данные, к которым вы пытаетесь получить доступ.
Теперь тип Searchable
не содержит type
:
type Searchable {
displayLabel: String
imageUrl: String
href: String
}
Но, если вы посмотрите, где реализован этот тип Searchable
, вы можете увидеть SearchableItem
- который содержит свойство displayType
- которого на самом деле нет в Searchable
.
Вы можете получить доступ к свойству из SearchableItem
и получите displayType
, вот так:
{
search(query: "Berlin", first: 100, page: 1, entities: [ARTIST, ARTWORK, ARTICLE]) {
edges {
node {
displayLabel
imageUrl
href
... on SearchableItem {
displayType
}
}
}
}
}
и ваш результат будет выглядеть так:
{
"data": {
"search": {
"edges": [
{
"node": {
"displayLabel": "Boris Berlin",
"imageUrl": "https://d32dm0rphc51dk.cloudfront.net/CRxSPNyhHKDIonwLKIVmIA/square.jpg",
"href": "/artist/boris-berlin",
"displayType": "Artist"
}
},
...