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 32: Línia 32:
 
* No retorna HTML, retorna un text que pot ser qualsevol cosa
 
* No retorna HTML, retorna un text que pot ser qualsevol cosa
 
* No hi ha \n final (s'enganxa amb el ''prompt'' de la ''shell'')
 
* 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$
  
 
<br>
 
<br>

Revisió del 17:27, 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.