|
1 | 1 | # Boilerplate GraphQL Apollo with Factory Method
|
2 | 2 |
|
3 |
| -## Project setup |
| 3 | +Boilerplate para futuros projetos usando GraphQL Apollo em Vue.js. |
4 | 4 |
|
| 5 | +Esta arquitetura foi baseada no artigo [Vue API calls in a smart way](https://medium.com/canariasjs/vue-api-calls-in-a-smart-way-8d521812c322) que propõe o uso do padrão de projeto Factory Method para chamadas API, a fim de esconder detalhes de implementação e expor apenas a interface pública para as chamadas. No artigo, é proposto o uso da biblioteca axios, mas para fins de estudos, implementei o uso de [GraphQL](https://graphql.org/). |
| 6 | + |
| 7 | +Por meio de Injeção de Depedências, o Apollo Provider é passado para os repositories que fazem a manipulação direta das queries e mutations. Assim, garantindo que seja possível usar diferentes APIs para consumo, sendo necessário apenas a extração do client desejado. |
| 8 | + |
| 9 | +```js |
| 10 | +export default function({ defaultClient: apollo }) { |
| 11 | + return { |
| 12 | + get({ variables }) { |
| 13 | + return apollo.query({ |
| 14 | + query: getGraphFile(GRAPH_QUERIES_PATH, "getCharacters"), |
| 15 | + variables |
| 16 | + }); |
| 17 | + }, |
| 18 | + |
| 19 | + ... |
5 | 20 | ```
|
6 |
| -yarn install |
| 21 | +
|
| 22 | +Chame o repositório que deseja usar através da Factory: |
| 23 | +```js |
| 24 | +import { repositoryFactory } from "@/repository/repositoryFactory.js"; |
| 25 | +const charactersRepository = repositoryFactory.get("characters"); |
| 26 | +``` |
| 27 | +
|
| 28 | +E faça uma consulta: |
| 29 | +```js |
| 30 | +const character = await charactersRepository.getCharacter({ |
| 31 | + variables: { |
| 32 | + charId: 2 |
| 33 | + } |
| 34 | +}); |
7 | 35 | ```
|
8 | 36 |
|
9 |
| -### Compiles and hot-reloads for development |
| 37 | +## Arquitetura |
10 | 38 |
|
11 | 39 | ```
|
12 |
| -yarn run serve |
| 40 | +src |
| 41 | +│ App.vue |
| 42 | +│ main.js |
| 43 | +│ |
| 44 | +└─── graphql |
| 45 | +│ └─── queries |
| 46 | +| | | getCharacters.gql |
| 47 | +│ │ | getCharacter.gql |
| 48 | +│ │ | getEpisodes.gql |
| 49 | +│ │ | getEpisode.gql |
| 50 | +| | |
| 51 | +│ └─── mutations |
| 52 | +│ │ ... |
| 53 | +│ |
| 54 | +└─── repository |
| 55 | +| | index.js |
| 56 | +| | repositoryFactory.js |
| 57 | +| └─── repositories |
| 58 | +| | charactersRespository.js |
| 59 | +| | episodesRespository.js |
| 60 | +| |
| 61 | +└─── utils |
| 62 | +| | graphql.js |
13 | 63 | ```
|
14 | 64 |
|
15 |
| -### Compiles and minifies for production |
| 65 | +## Tecnologias |
| 66 | +* vue-apollo |
| 67 | +* graphql-tag |
| 68 | +
|
| 69 | +## Como baixar |
| 70 | +
|
| 71 | +É necessário ter no mínimo a versão 8 do [NodeJS](https://nodejs.org/en/download) instalado e consequentemente o NPM (que vem junto com o Node quando instalado). Neste projeto, optei pelo [Yarn](https://yarnpkg.com), mas fique a vontade para usar o que lhe for conveniente. |
| 72 | +
|
| 73 | +Clone este repositório (caso queira clonar por linha de comando necessitará do [git](https://git-scm.com) instalado) |
16 | 74 |
|
17 | 75 | ```
|
18 |
| -yarn run build |
| 76 | +git clone https://github.com/exploitmik/vue-boilerplate-graphql.git |
| 77 | +``` |
| 78 | +
|
| 79 | +Depois vá até a pasta clonada, por exemplo: |
| 80 | +
|
| 81 | +``` |
| 82 | +cd vue-boilerplate-graphql/ |
| 83 | +``` |
| 84 | +
|
| 85 | +## Como rodar |
| 86 | +
|
| 87 | +Dentro da pasta, os seguintes comandos estarão disponíveis: |
| 88 | +
|
| 89 | +### Instalar todas as dependências para o projeto funcionar |
| 90 | +
|
| 91 | +``` |
| 92 | +yarn install |
19 | 93 | ```
|
20 | 94 |
|
21 |
| -### Run your tests |
| 95 | +### Compilar e executar um servidor de desenvolvimento com hot-reloading |
22 | 96 |
|
23 | 97 | ```
|
24 |
| -yarn run test |
| 98 | +yarn run serve |
25 | 99 | ```
|
26 | 100 |
|
27 |
| -### Lints and fixes files |
| 101 | +### Compilar e minificar para produção |
28 | 102 |
|
29 | 103 | ```
|
30 |
| -yarn run lint |
| 104 | +yarn run build |
31 | 105 | ```
|
0 commit comments