Diferència entre revisions de la pàgina «Serveis web amb Laravel»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 75: Línia 75:
  
 
En l'exemple del karaoke tenim 3 crides, i les especificarem amb uns quadres tal que aquests:
 
En l'exemple del karaoke tenim 3 crides, i les especificarem amb uns quadres tal que aquests:
 +
 +
=== vots ===
 +
Al ser una crida GET, els paràmetres han d'anar a la URL. Si fos POST, anirien afegits en el cos de la ''request'':
 +
 +
{| class="wikitable"
 +
!colspan="3"|Request
 +
|-
 +
!colspan="3"|GET /api/vots/{tema_id}
 +
|-
 +
!Param
 +
!Values
 +
!Description
 +
|-
 +
| tema_id
 +
| integer
 +
| ID del tema del que volem saber el nº de vots que té
 +
|}
 +
 +
{| class="wikitable"
 +
!colspan="3"|Response
 +
|-
 +
!colspan="3"|GET /api/vots/{tema_id}
 +
|-
 +
!Param
 +
!Values
 +
!Description
 +
|-
 +
| status
 +
| "OK" / "ERROR"
 +
| Estat intern de la consulta/acció
 +
|-
 +
| nvots
 +
| integer
 +
| Total de vots per al tema
 +
|-
 +
| message
 +
| text
 +
| Missatge de text amb la descripció de l'error o acció
 +
|}
 +
 +
<br>
  
 
=== vota ===
 
=== vota ===
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
!colspan="3"|Request
 
!colspan="3"|Request
Línia 86: Línia 128:
 
!Description
 
!Description
 
|-
 
|-
| -
+
| tema_id
| -
+
| integer
| -
+
| ID del tema del que volem saber el nº de vots que té
 
|}
 
|}
  
Línia 116: Línia 158:
 
| Missatge de text amb la descripció de l'error o acció
 
| Missatge de text amb la descripció de l'error o acció
 
|}
 
|}
 +
 +
<br>
  
 
=== fet ===
 
=== fet ===
  
=== vots ===
+
{| class="wikitable"
 
+
!colspan="3"|Request
 +
|-
 +
!colspan="3"|GET /api/vota/{tema_id}
 +
|-
 +
!Param
 +
!Values
 +
!Description
 +
|-
 +
| tema_id
 +
| integer
 +
| ID del tema del que volem saber el nº de vots que té
 +
|}
  
 +
{| class="wikitable"
 +
!colspan="3"|Response
 +
|-
 +
!colspan="3"|GET /api/vota/{tema_id}
 +
|-
 +
!Param
 +
!Values
 +
!Description
 +
|-
 +
| status
 +
| "OK" / "ERROR"
 +
| Estat intern de la consulta/acció
 +
|-
 +
| fet
 +
| true / false
 +
| Estat actual del tema (fet / no fet)
 +
|-
 +
| message
 +
| text
 +
| Missatge de text amb la descripció de l'error o acció
 +
|}
  
 
<br>
 
<br>

Revisió del 18:14, 9 març 2017

Per poder seguir amb normalitat aquest article cal haver llegit i treballat Laravel.


Perquè Laravel per a serveis web?

No és imprescindible utilitzar Laravel per implementar un servei web. Ens és convenient pels següents motius:

  1. En el curs de M7 de DAW estem treballant amb aquest framework i ens interessa aprofundir el seu coneixement.
  2. Integrarem la part del frontend de la nostra web juntament amb la API que farem.
  3. Laravel facilita l'accés a la base de dades a través del ORM Eloquent, que resulta molt útil.


Primera prova de la API

Totes les funcions que vulguem implementar per al nostre sistema hem de començar per indicar-les al arxiu de rutes:

routes/api.php

De fet, les podríem implementar al mateix arxiu. Quan es compliquin, però, convindrà crear un controlador com vam fer al tutorial de Laravel.

Afegiu el següent codi a routes/api.php:

Route::get('/ping', function(Request $request) {
    return "pong! :)";
});

Poseu en marxa el servidor i proveu la funció amb:

$ curl localhost:8000/api/ping
pong! :)super@HPi5-07:~/dev/laraveltest1$ 

Noteu que:

  • Encara que hem definit la ruta "/ping", per poder-la cridar hem de fer "/api/ping". Ve predefinit pel Laravel, tot i que no té perquè ser així.
  • Ens contesta el què hem posat al RETURN final
  • No retorna HTML, retorna un text que pot ser qualsevol cosa
  • No hi ha \n final (s'enganxa amb el prompt de la shell)

Headers en la crida curl

Per veure els headers de retorn, podem utilitzar "-i", pot ser molt útil per depurar:

$ curl -i localhost:8000/api/ping

Obtindrem:

HTTP/1.1 200 OK
Host: localhost:8000
Connection: close
X-Powered-By: PHP/7.0.15-0ubuntu0.16.04.4
Cache-Control: no-cache
Content-Type: text/html; charset=UTF-8
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
Date: Thu, 09 Mar 2017 17:25:32 GMT 
pong! :)super@HPi5-07:~/dev/laraveltest1$ 


Exemples de API: laravel-karaoke

En el projecte karaoke en Laravel, el podeu veure aquí:

Recordem que per crear un controller amb Laravel ho fem amb (per exemple):

$ php artisan make:controller ApiController

Si mireu TemaController pareu atenció que per poder fer crides com TemaController::fet($id) , necessitem que siguin funcions estàtiques (static).

Ara, per poder mirar el nº de vots, a routes/api.php tindrem:

Route::get('/nvots/{id}', function(Request $request, $id) {
    return TemaController::nvots( $id );
});


Especificacions d'una API

És molt important especificar adequadament una API per tal que la pugui fer servir molta gent.

En l'exemple del karaoke tenim 3 crides, i les especificarem amb uns quadres tal que aquests:

vots

Al ser una crida GET, els paràmetres han d'anar a la URL. Si fos POST, anirien afegits en el cos de la request:

Request
GET /api/vots/{tema_id}
Param Values Description
tema_id integer ID del tema del que volem saber el nº de vots que té
Response
GET /api/vots/{tema_id}
Param Values Description
status "OK" / "ERROR" Estat intern de la consulta/acció
nvots integer Total de vots per al tema
message text Missatge de text amb la descripció de l'error o acció


vota

Request
GET /api/vota/{tema_id}
Param Values Description
tema_id integer ID del tema del que volem saber el nº de vots que té
Response
GET /api/vota/{tema_id}
Param Values Description
status "OK" / "ERROR" Estat intern de la consulta/acció
vot true / false Estat actual del nostre vot de la nostra IP
nvots integer Total de vots per al tema
message text Missatge de text amb la descripció de l'error o acció


fet

Request
GET /api/vota/{tema_id}
Param Values Description
tema_id integer ID del tema del que volem saber el nº de vots que té
Response
GET /api/vota/{tema_id}
Param Values Description
status "OK" / "ERROR" Estat intern de la consulta/acció
fet true / false Estat actual del tema (fet / no fet)
message text Missatge de text amb la descripció de l'error o acció