Skip to content

Commit e37d879

Browse files
authored
Merge pull request #40 from OrcaPracticas/add/ApiRest
[Pull Request] Api Rest
2 parents a5d09e5 + 6003494 commit e37d879

8 files changed

Lines changed: 242 additions & 11 deletions

File tree

README.md

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,7 @@ pulsamo el boton **play** esto ya nos tiene que estar lanzando resultados.
124124

125125
#### Paso 7
126126

127-
Procederemos a levanta al **App** que se conectara al servidor de **GQL**, para esto ejecutaremos el comando siguiente.
128-
127+
Procederemos a levantar al **App** que se conectara al servidor de **GQL**, para esto ejecutaremos el comando siguiente, (Es necesario abrir una nueva venta en la terminal).
129128

130129
```bash
131130
$ yarn start:app
@@ -139,6 +138,33 @@ o
139138
140139
Al termino de los pasos anteriores tendremos el proyecto en ejecución.
141140

141+
#### Paso 8
142+
143+
También podemos probar la consulta a un **API REST** , para esto ejecutaremos el comando siguiente, (Es necesario abrir una nueva venta en la terminal).
144+
145+
```bash
146+
$ yarn start:json
147+
```
148+
o
149+
150+
```bash
151+
$ npm run start:json
152+
```
153+
> 📝 Nota: El servidor se ejecuta en la url http://localhost:8081,
154+
155+
En el servidor de *GQL* podemos ejecutar el Comenzando
156+
157+
```javaScript
158+
{
159+
findUSer(id: 2) {
160+
id
161+
name
162+
age
163+
email
164+
}
165+
}
166+
```
167+
142168
## Deployment 📦
143169

144170
Es importante mencionar que el proyecto cuenta con **tags** que facilita el movimiento entre las etapas del desarrollo realizado durante el curso.
@@ -152,11 +178,10 @@ Es importante mencionar que el proyecto cuenta con **tags** que facilita el movi
152178
* **[Busqueda y manejo de errores](https://github.com/OrcaPracticas/GQL/tree/Busqueda)**
153179
* **[Integración con React](https://github.com/OrcaPracticas/GQL/tree/React)**
154180
* **[Integración con apollo](https://github.com/OrcaPracticas/GQL/tree/Apollo)**
181+
* **[Integración con Api Rest](https://github.com/OrcaPracticas/GQL/tree/api)**
155182

156183
Cada una de las faces correspondientes al desarrollo generado durante el cursó, cada fase cuenta con su **Release** el cual tiene realción con un **PullRequest** que a su vez tiene relación con un **Milestones** el cuales tienen realación con **issues** y estos tienen relacionados los **commits** generados.
157184

158-
159-
160185
## Construido con 🛠️
161186

162187
Esta practica se construyo utilizando las siguientes tecnologias.
@@ -179,7 +204,7 @@ Esta practica se construyo utilizando las siguientes tecnologias.
179204

180205
## Licencia 📄
181206

182-
Este proyecto está bajo la Licencia MIT mira el archivo [LICENSE.md](LICENSE.md) para detalles.
207+
Este proyecto está bajo la Licencia MIT mira el archivo [LICENSE.md](LICENSE) para detalles.
183208

184209
⌨️ con ❤️ por [Konami12](https://github.com/konami12) 😊
185210

package.json

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
"author": "<jorge.mendez.ortega@gmail.com>",
33
"dependencies": {
44
"apollo-boost": "0.1.15",
5+
"apollo-server-express": "2.0.4",
6+
"axios": "^0.18.0",
57
"body-parser": "1.18.3",
68
"casual": "1.5.19",
79
"express": "4.16.3",
8-
"apollo-server-express": "2.0.4",
10+
"graphql": "^14.0.0",
911
"graphql-tag": "2.9.2",
1012
"graphql-tools": "3.1.1",
13+
"json-server": "^0.14.0",
1114
"knex": "0.15.2",
1215
"objection": "1.2.3",
1316
"react": "16.4.2",
@@ -34,13 +37,14 @@
3437
"scripts": {
3538
"start:gql": "nodemon ./launcher",
3639
"start:app": "react-scripts start",
40+
"start:json": "json-server --watch ./src/DB/db.json --port 8081",
3741
"db:migrate": "knex migrate:latest --knexfile=src/DB/knexfile.js",
3842
"db:seed": "knex seed:run --knexfile=src/DB/knexfile.js"
3943
},
4044
"proxy": {
41-
"/api": {
42-
"target": "http://localhost:8080/graphql"
43-
}
44-
},
45+
"/api": {
46+
"target": "http://localhost:8080/graphql"
47+
}
48+
},
4549
"version": "1.0.0"
4650
}

src/DB/db.json

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
{
2+
"users": [
3+
{
4+
"id": 0,
5+
"age": 31,
6+
"name": "Peck Montoya",
7+
"email": "peckmontoya@qualitex.com",
8+
"friends": [
9+
{
10+
"id": 1
11+
},
12+
{
13+
"id": 2
14+
}
15+
]
16+
},
17+
{
18+
"id": 1,
19+
"age": 36,
20+
"name": "Renee Herman",
21+
"email": "reneeherman@qualitex.com",
22+
"friends": [
23+
{
24+
"id": 0
25+
},
26+
{
27+
"id": 2
28+
}
29+
]
30+
},
31+
{
32+
"id": 2,
33+
"age": 23,
34+
"name": "Sheena Madden",
35+
"email": "sheenamadden@qualitex.com",
36+
"friends": [
37+
{
38+
"id": 0
39+
},
40+
{
41+
"id": 1
42+
}
43+
]
44+
},
45+
{
46+
"id": 3,
47+
"age": 22,
48+
"name": "Shari Justice",
49+
"email": "sharijustice@qualitex.com",
50+
"friends": [
51+
{
52+
"id": 4
53+
}
54+
]
55+
},
56+
{
57+
"id": 4,
58+
"age": 38,
59+
"name": "Eaton Horton",
60+
"email": "eatonhorton@qualitex.com",
61+
"friends": [
62+
{
63+
"id": 3
64+
}
65+
]
66+
},
67+
{
68+
"id": 5,
69+
"age": 18,
70+
"name": "Lois Best",
71+
"email": "loisbest@qualitex.com",
72+
"friends": [
73+
{
74+
"id": 6
75+
},
76+
{
77+
"id": 7
78+
},
79+
{
80+
"id": 8
81+
},
82+
{
83+
"id": 9
84+
}
85+
]
86+
},
87+
{
88+
"id": 6,
89+
"age": 40,
90+
"name": "Schroeder Stafford",
91+
"email": "schroederstafford@qualitex.com",
92+
"friends": [
93+
{
94+
"id": 5
95+
}
96+
]
97+
},
98+
{
99+
"id": 7,
100+
"age": 33,
101+
"name": "Hanson Collins",
102+
"email": "hansoncollins@qualitex.com",
103+
"friends": [
104+
{
105+
"id": 5
106+
}
107+
]
108+
},
109+
{
110+
"id": 8,
111+
"age": 21,
112+
"name": "Walton York",
113+
"email": "waltonyork@qualitex.com",
114+
"friends": [
115+
{
116+
"id": 5
117+
}
118+
]
119+
},
120+
{
121+
"id": 9,
122+
"age": 38,
123+
"name": "Walter Manning",
124+
"email": "waltermanning@qualitex.com",
125+
"friends": [
126+
{
127+
"id": 5
128+
},
129+
{
130+
"id": 10
131+
}
132+
]
133+
},
134+
{
135+
"id": 10,
136+
"age": 26,
137+
"name": "Carmen Butler",
138+
"email": "carmenbutler@qualitex.com",
139+
"friends": [
140+
{
141+
"id": 9
142+
}
143+
]
144+
},
145+
{
146+
"id": 13,
147+
"name": "Indigo Montoya",
148+
"age": 31,
149+
"email": "indigomontoya@gmail.com",
150+
"friends": [
151+
{
152+
"id": 1
153+
},
154+
{
155+
"id": 2
156+
}
157+
]
158+
}
159+
]
160+
}

src/DB/db.sqlite

0 Bytes
Binary file not shown.

src/DB/models/User.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import Axios from "axios";
2+
3+
class User {
4+
constructor() {
5+
this.api = Axios.create({
6+
baseURL: "http://localhost:8081",
7+
});
8+
}
9+
10+
list() {
11+
return this
12+
.api
13+
.get("/users")
14+
.then(response => response.data);
15+
}
16+
17+
find(id) {
18+
return this
19+
.api
20+
.get(`/users/${id}`)
21+
.then(response => response.data);
22+
}
23+
}
24+
25+
export default new User();

src/DB/models/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import ModeloComentario from "./Comentario";
22
import ModeloCurso from "./Curso";
33
import ModeloProfesor from "./Profesor";
4+
import ModeloUser from "./User";
45

56
export {
67
ModeloComentario,
78
ModeloCurso,
89
ModeloProfesor,
10+
ModeloUser,
911
};

src/schemas/resolvers/resolver.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// Importacion de modelos referentes a la base de datos.
2-
import { ModeloCurso, ModeloProfesor, ModeloComentario } from "../../DB/models";
2+
import {
3+
ModeloCurso, ModeloProfesor,
4+
ModeloComentario, ModeloUser,
5+
} from "../../DB/models";
36
import BuildMutation from "./BuildMutation";
47

58
/**
@@ -9,6 +12,7 @@ const RESOLVERS = {
912
Query: {
1013
// permite extraer los datos de la DB y
1114
// con eager se le indica que relaciones tiene cada tabla.
15+
user: () => ModeloUser.list(),
1216
cursos: () => ModeloCurso.query().eager("[profesor, comentarios]"),
1317
profesores: () => ModeloProfesor.query().eager("cursos"),
1418
comentarios: () => ModeloComentario.query().eager(),
@@ -20,6 +24,7 @@ const RESOLVERS = {
2024
ModeloCurso.query().findById(2),
2125
];
2226
},
27+
findUSer: (_, args) => ModeloUser.find(args.id),
2328
},
2429
ResultadoBusqueda: {
2530
__resolveType: object => ((object.nombre) ? "Profesor" : "Curso"),

src/schemas/schema.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,30 @@ import { ApolloServer, gql } from "apollo-server-express";
55
import resolvers from "./resolvers";
66
import { Curso, Profesor } from "./schemas";
77

8+
89
// Creacion del schema, es importante declarar
910
// el Query root ya que este indica el endpoint
1011
const ROOT_QUERY = gql`
1112
# **Busqueda
1213
union ResultadoBusqueda = Profesor | Curso
1314
15+
type User {
16+
id: ID!
17+
name: String
18+
age: Int
19+
email: String
20+
}
21+
1422
# **Root type Query** _endpoint_ principal
1523
type Query {
24+
user: [User]
1625
cursos: [Curso]
1726
profesores: [Profesor]
1827
comentarios: [Comentario]
1928
curso(id: Int): Curso
2029
profesor(id: Int): Profesor
2130
buscar(query: String!): [ResultadoBusqueda]
31+
findUSer(id: Int): User
2232
}
2333
# **Mutaciones disponibles dentro del proyecto
2434
type Mutation {

0 commit comments

Comments
 (0)