graphql client apollo vue

crearemos bajo la carpeta src
una llamada graphql y dentro otra llamada queries
donde guardaremos nuestras queries.
Crearemos ahi el archivo categories.gql

query{

categories{
id
name
}

}

luego en Home.vue
<template>
<div class="home">
<ApolloQuery :query="require('../graphql/queries/categories.gql')">
<template slot-scope="{ result: { data, loading } }">
<div v-if="loading">Loading...</div>
<ul v-else>
<li v-for="category of data.categories" :key="category.id" class="user">
{{ category.name }}
</li>
</ul>
</template>
</ApolloQuery>
</div>
</template>


si recargamos la pagina podremos ver el listado de categories
sin embargo aunque la carga no sea inmediata, el mensaje de "loading..." no aparece.
para que funcione vamos a modificar las sgts lineas:

<template slot-scope="{ result: { data, loading } }">
<!-- Some content -->
<div v-if="loading">Loading...</div>

ahora queremos que al clickear sobre una categoria nos liste los libros que tenga esa categoria.

para eso primero creamos el archivo category.gql

query($id: ID!){
category(id: $id){
id
name
books{
id
title
author
image
}
}
}

luego en nuestro codigo agregamos

el bloque para mostrar los libros
<ApolloQuery :query="require('../graphql/queries/category.gql')" :variables="{id: selectedCategory}">
<template slot-scope="{ result: { data, loading }, isLoading }">
<div v-if="isLoading">Loading...</div>
<div v-else>
<div v-for="book of data.category.books" :key="book.id" class="link-margin">
{{ book.title }}.{{ book.title }}
</div>
</div>
</template>
</ApolloQuery>

notar que inicialmente se cargaran los libros de la categoria 1
para lo cual

en la seccion de script
<script>
// @ is an alias to /src
export default{
data(){
return {
selectedCategory : 1
}
},

y para hacer dinamica la pagina creamos el metodo que le asigna un valor a la variable "selectedCategory" segun la categoria que clickeemos

en la misma seccion de script, y debajo de data, escribimos:
methods: {
selectCategory(category){
this.selectedCategory = category
}
}

y en la seccion de categorias implementamos el evento click para que llame a ese metodo
<a href="#" v-for="category of data.categories" :key="category.id" class="link-margin"
@click="selectCategory(category.id)">
{{ category.name }}
</a>

nota:
posiblemente aunque la aplicacion funcione en la terminal el Eslint de errores o warnings
que no tengan sentido
para evitarlos

crear en la raiz del proyecto un archivo llamado

.eslintignore
y adentro escribir la sgt linea

*/*.gql


instalar php en windows 10

Install the Visual C++ Redistributable for Visual Studio 2015—this is linked in the sidebar of the PHP for Windows Download page, but it's kind of hidden. If you don't do this, you'll run into a rather cryptic error message, VCRUNTIME140.DLL was not found, and php commands won't work.
  1. Download PHP for Windows. I prefer to use 7.1.x (current release - 1), so I downloaded the latest Non-thread-safe 64-bit version of 7.1.x. I downloaded the .zip file version of the VC14 x64 Non Thread Safe edition, under the PHP 7.1 heading.
  2. Expand the zip file into the path C:\PHP7.
  3. Configure PHP to run correctly on your system:
    1. In the C:\PHP7 folder, rename the file php.ini-development to php.ini.
    2. Edit the php.ini file in a text editor (e.g. Notepad++, Atom, or Sublime Text).
    3. Change the following settings in the file and save the file:
      1. Change memory_limit from 128M to 1G (because Composer can use lots of memory!)
      2. Uncomment the line that reads ; extension_dir = "ext" (remove the ; so the line is just extension_dir = "ext").
      3. In the section where there are a bunch of extension= lines, uncomment the following lines:
        1. extension=php_gd2.dll
        2. extension=php_curl.dll
        3. extension=php_mbstring.dll
        4. extension=php_openssl.dll
        5. extension=php_pdo_mysql.dll
        6. extension=php_pdo_sqlite.dll
        7. extension=php_sockets.dll
  4. Add C:\PHP7 to your Windows system path:
    1. Open the System Control Panel.
    2. Click 'Advanced System Settings'.
    3. Click the 'Environment Variables...' button.
    4. Click on the Path row under 'System variables', and click 'Edit...'
    5. Click 'New' and add the row C:\PHP7.
    6. Click OK, then OK, then OK, and close out of the System Control Panel.
  5. Open PowerShell or another terminal emulator (I generally prefer cmder), and type in php -v to verify PHP is working.
At this point, you should see output like:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\jgeerling> php -v
PHP 7.0.29 (cli) (built: Mar 27 2018 15:23:04) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

vscode laravel linux mint desactivar authentication al guardar

supongamos
que tenemos nuestra aplicacion en la carpeta html
en /var/www/html/

entonces vamos a cambiar al owner de la carpeta y las subcarpetas y archivos que esten dentro de ella
nos posicionamos en /var/www

y (suponiendo que nustro usuario se llame "israel")

sudo chown -R israel:israel html

graphql usando ligthhouse

Vamos a poner de ejemplo
Category
Book
despues de crear los modelos y las migraciones

vamos a instalar ligthhouse desde : https://lighthouse-php.com

composer require nuwave/lighthouse

luego publicamos el provider

php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider" --tag=schema


editamos el archivo graphql/schema.graphql

registramos los types:

type Book {
id: ID!
title: String!
author: String!
image: String
description: String
link: String
featured: Boolean!
category: Category! @belongsTo
}
type Category {
id: ID!
name: String!
books: [Book] @hasMany
}


y en el type Query agregamos
el que lista los libros

type Query {
books: [Book] @all
}

cada vez que escribamos una nueva entrada en el type Query
deberemos validar el schema, ademas de esta manera refrescamos para que pueda ser leida desde el cliente

php artisan lighthouse:validate-schema

Install MariaDB Database Server

MariaDB database server is a great place to start when looking at open source database servers to use with Magento… To install MariaDB run the commands below…
sudo apt-get install mariadb-server mariadb-client
After installing MariaDB, the commands below can be used to stop, start and enable MariaDB service to always start up when the server boots..
Run these on Ubuntu 16.04 LTS
sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service
Run these on Ubuntu 17.10 and 18.04 LTS
sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
After that, run the commands below to secure MariaDB server by creating a root password and disallowing remote root access.
sudo mysql_secure_installation
When prompted, answer the questions below by following the guide.
  • Enter current password for root (enter for none): Just press the Enter
  • Set root password? [Y/n]: Y
  • New password: Enter password
  • Re-enter new password: Repeat password
  • Remove anonymous users? [Y/n]: Y
  • Disallow root login remotely? [Y/n]: Y
  • Remove test database and access to it? [Y/n]:  Y
  • Reload privilege tables now? [Y/n]:  Y
Restart MariaDB server
To test if MariaDB is installed, type the commands below to logon to MariaDB server
sudo mysql -u root -p

Install Laravel PHP Framework On Ubuntu 16.04

https://websiteforstudents.com/install-laravel-php-framework-on-ubuntu-16-04-17-10-18-04-with-apache2-and-php-7-2-support/

para saber el estado del servidor apache

service apache2 status

graphql cliente vue con apollo

antes que nada la aplicacion server grapql la tenemos hecha en laravel 5.8

y para que nos de errores de CORS, debemos instalarlo, por ejemplo este libreria:

composer require barryvdh/laravel-cors

y luego editar el archivo config/graphql.php

'middleware' => [\Barryvdh\Cors\HandleCors::class],

Creamos un proyecto Vue, usando Vue cli

npm install -g @vue/cli-service-global
vue create aplicacion-cliente
npm run serve --------------->levantara el proyecto en http://localhost:8080/

vamos a usar las librerias vue apollo

https://vue-apollo.netlify.com/

entonces dentro de la carpeta del proyecto ejecutamos el sgt comando:

vue add apollo

Editar el archivo HelloWorld.vue

en la seccion de script:

import gql from 'graphql-tag';

export default {
...
data() {
return {
cities: [],
city: null
}
},
apollo: {
cities: gql`{
cities{
name
}
}`,
},

y en el archivo vue-apollo.js
agregamos la url del server al cual nos vamos a apuntar
const httpEndpoint = process.env.VUE_APP_GRAPHQL_HTTP || 'http://127.0.0.1:8000/graphql'


si recargamos la pagina, al  inspeccionarla vamos a la pestaña de Vue
y si hacemos click en la ultima parte de la estructura veremos
las cities cargadas.

ahora implementemos una llamada a una mutation, en nuestro ejemplo para crear una city

volvemos a la seccion script del archivo HelloWorld.vue y debajo de apollo...

methods: {
handleClick() {
this.$apollo.mutate({
mutation: gql`mutation {
createCity(name: "La Paz") {
id
name
}
}`,
})
}
}

ese metodo ahora se lo asignamos al evento click que creamos en esa misma pagina

<div class="hello"> <h1>{{ msg }}</h1>
  <button @click="handleClick()">Test Mutation</button>

 AL recargar la pagina y al hacer click en ese boton se creará el nuevo registro

jwt json web token concepto

https://www.programacion.com.py/varios/que-es-json-web-token-jwt

  • un usuario hace login (no necesita enviar token porque no lo tiene), 
  • una vez el servidor de ok retorna un token cómo respuesta 
  • el usuario debe enviar dicho token en las siguientes peticiones para poder acceder a los recursos del servicio.
  • En cada petición el servidor debe comprobar el token proporcionado por el usuario y si es correcto podrá acceder a los recursos solicitados, de otra forma deberá denegar la petición.




para ver el token decodificado:

https://jwt.io/

Laravel5.8 GraphQL cliente

instalar la libreria

composer require softonic/graphql-client
para testear rapidamente, editamos web.php:
Route::get('/', function () {
$client = \Softonic\GraphQL\ClientBuilder::build('https://countries.trevorblades.com/');
$query = '
{
countries{
code
name
languages{
name
}
}
}
';
$variables = [
];
$response = $client->query($query, $variables);
dd($response->getData());
});
si quisieramos llamar a una query con parametros:
$query = '
{
query getCountry($code: String){
country (code: $code){
code
name
languages{
name
}
}
}
}
';
$variables = [
"code" => "AR"
];


GraphQL listado de endpoints publicos

https://github.com/APIs-guru/graphql-apis

laravel5.8 graphql mejor tutorial externo

https://blog.pusher.com/graphql-laravel/

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable