Une implémentation GraphQL pour exposer efficacement les ressources de débordement de pile (commentaires, publications, réponses, votes, etc.)
Stack Exchange n'a pas de point de terminaison GraphQL, donc j'en ai fait un. L'API en direct ci-dessus est en mode POC pour l'instant lorsque le schéma est construit. Il sert actuellement de contenu à partir de https://health.stackexchange.com/ et est mis à jour chaque semaine avec plus à venir alors que le pipeline et l'infra sont renforcés et construits. Attendez-vous à une quantité minimale de latence car celle-ci est actuellement hébergée dans un service d'applications, qui se répercutera pendant les périodes de faible usage. Si cela se produit, veuillez être patient et que le terrain de jeu / les demandes devraient faire du flambage après le premier «réveil». Si cela obtient une certaine traction, la disponibilité sera augmentée.
Pour courir localement:
docker-compose up
Et visitez http: // localhost: 8080 pour commencer à utiliser le terrain de jeu ou appuyez sur le point de terminaison avec quelques requêtes! Par exemple, pour obtenir des informations sur les pages de questions / réponses les plus scores dans une sous-communautaire:
query postsPagination {
allPostsCursor(first: 10, where: { order: { field: votes, order: DESC } }) {
pageInfo {
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
score
title
body
comments {
userId
text
}
answers {
score
body
comments {
userDisplayName
text
}
}
}
}
}
}
Le serveur est également disponible en tant que conteneur Docker à condition qu'un backend distinct existe:
docker run -e SERVER='<dbhost>' -e UNAME='<dbUname>' -e PASS='<dbPass>' snimmagadda/stack-exchange-graphql-server:latest
ou pour courir à partir de la source:
go run cmd/server.goCertaines variables d'environnement doivent être définies pour s'exécuter localement
| Clé | Taper | Description | Exemple |
|---|---|---|---|
SERVER | Chaîne | Hôte DB | hôte local |
SCHEMA | Chaîne | schéma d'application db | stacke |
UNAME | Chaîne | Nom d'utilisateur de l'application DB | appuseur |
PASS | Chaîne | application db mot de passe créditer | supersecret123 |
SERVER doit être le nom d'hôte d'une DB MySQL. Afin de servir du contenu, le serveur GraphQL s'attend à un schéma stacke peuplé.
TODO: paramètres configurables ...
go build cmd/server.goLes options de développement sont facilement flexibles avec des itinéraires plus rationalisés à venir ... Pour l'instant, ce qui suit est disponible:
Exécutez le backend uniquement avec Docker (ou tweak et utilisez docker-compose.yml )
docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_ROOT_USER=root -e MYSQL_PASSWORD=password -d -p 3306:3306 mysql:5.7.26
~ 1k lignes existent ici seront utilisées comme inserts sur votre schéma.
Créer (ou copier) un fichier .env avec les variables dans le tableau ci-dessus défini pour configurer le serveur GraphQL local.
Démarrez le serveur:
go run cmd/server.go
TODO Je vais probablement faire du raffinement et échanger sur quelque chose comme un backend élastique, mais pour l'instant, voici la configuration précoce. Les vidages XML publiés par Stack Exchange sont importés dans un backend relationnel indexé à l'aide d'un travail écrit avec un lot Spring sur un calendrier. Le serveur GraphQL lit à partir de ce backend pour exposer les données d'échange de pile. 
? Sai Nimmagadda
Ce projet est actuellement en mode build. Les contributions, les problèmes et les demandes de fonctionnalités sont les bienvenus!
N'hésitez pas à vérifier la page des problèmes.
Donnez un ️ si ce projet vous a aidé!
Copyright © 2020 Sai Nimmagadda.
Ce projet est sous licence MIT.
Cette lecture a été générée avec ❤️ par ReadMe-MD-Generator