Чтобы ответить на ваш вопрос, вы можете иметь дело с тремя способами:
Если вы настроены на использование Firebase, вы можете сделать взаимно однозначное сопоставление API Firebase в запросах и мутациях GraphQL.
Вы можете, конечно, обернуть API Firebase в преобразователи GraphQL, и таким образом вызывать вызовы. Это хороший пример этого :
const ref = path => firebase.database().ref(path)
const getValue = path => ref(path).once('value')
const mapSnapshotToEntities = snapshot => snapshot.val().map((value, id) => ({ id, ...value }))
const getEntities = path => getValue(path).then(mapSnapshotToEntities)
const resolvers = {
Author: {
posts(author) {
return getEntities('posts').then(posts => filter(posts, { authorId: author.id }))
},
},
Post: {
author(post) {
return getEntities('authors').then(posts => filter(authors, { id: authorId }))
},
},
};
По сути, вы здесь используете Firebase в качестве базы данных, которая работает, пока вы не захотите запросить свои данные в реляционная манера в ваших решениях. Без возможности выполнять соединения на стороне сервера поверх вашего хранилища данных вы будете делать тонны запросов на обратный путь к Firebase в ваших распознавателях, чтобы выполнить только один запрос.
Причина, по которой большинство люди используют Firebase для своих возможностей в реальном времени, а не в первую очередь как хранилище данных, поскольку средства реляционного моделирования данных в этом аспекте довольно отсутствуют. При этом вам, вероятно, лучше перейти на GraphQL с использованием другого источника данных.
Учитывая, что вы открыты для использования продуктов BaaS, таких как Firebase, вы можете перейти на GraphQL BaaS.
Если вы можете перейти на самостоятельное решение с помощью собственного хранилища данных, это также принесет много преимуществ. Вот несколько больших нападающих:
Это - Oracle DB XML Сервер HTTP; отключите его следующим образом:
sqlplus '/ as sysdba'
EXEC DBMS_XDB.SETHTTPPORT(0);
commit;
Вам, возможно, придется перезапустить XE Oracle (не только слушатель).