Чтобы ответить на ваши вопросы:
-
Почему это так и будет ли проблема, если данные не являются конфиденциальными данными пользователя?
Запрос _entities
, как вы сказали, очень мощный. Например, если вы используете ярлыки для управления доступом, это может быть опасно. Предположим, у вас есть частные пользователи. Если у вас есть проверки аутентификации для Query.user(id: ID)
в нефедеративном запросе, вам не обязательно ставить дополнительные проверки аутентификации для User.homeAddress
, так как вы не можете перейти к вложенному полю, не имея доступа к верхнему -уровневое поле. Теперь давайте представим, что ваша адресная служба расширяет объект пользователя. Теперь я могу сделать этот вызов конечной точке службы адреса (не через шлюз):
query ($_representations: [_Any!]!) {
_entities(representations:$_representations) {
... on User {
homeAddress {
street1
street2
city
state
postalCode
}
}
}
}
{
"_representations": [{
"__typename": "User",
"id": "user-id-whatever"
}]
}
И если вы сделали «ленивый контроль доступа», вы теперь не защищены, потому что он никогда не звонит сначала служба пользователей для получения разрешения. В дополнение к этому, вы можете видеть, что это зависит от того, имеете ли вы дело с «нечувствительными» данными или «незащищенными данными».
Сшивание схемы уже давно устарело. Похоже, они отказались от него, поскольку я больше не вижу предупреждений об устаревании там, где раньше видел их, но, насколько мне известно, он «все еще исчезает».
Не совсем, но я бы также рекомендовал Федерацию. Честно говоря, я долгое время занимался производством и того, и другого, и я был большим поклонником Federation, и я рекомендовал бы его в большинстве случаев. Единственное реальное различие между федерацией и сшиванием состоит в том, что сшиванием вы должны открывать «дополнительные поля» из ваших сервисов поддержки (например, чтобы добавить пользователя к объекту, сервис должен будет предоставить userId
, который вы затем можете использовать для Пришейте User
на. Федерация обходит это, выставляя _entities
, но в основном это вещь, и Федерация делает это за вас, поэтому вам не нужно создавать делегацию.