Web Services
La revisió el 14:10, 25 abr 2014 per Enric (discussió | contribucions) (Es crea la pàgina amb « == Introducció ==  Un '''servei web''' ve a ser un servei més del sistema informàtic (o sigui, un sistema d'intercanvi d'informació), però amb algunes peculiaritats…».)
Introducció
Un servei web ve a ser un servei més del sistema informàtic (o sigui, un sistema d'intercanvi d'informació), però amb algunes peculiaritats:
- Utilitza el protocol HTTP per intercanviar les dades.
- Utilitza els mètodes HTTP: GET, POST, PUT, DELETE (inspirat en el CRUD de les BBDD).
 - Pot tenir altres mètodes (arbitraris) però no és tan usual.
 
 - Sol aplicar-se a sistemes navegables (enllaços/hipervincles).
 - Sol estar al port 80
 - Sol utiltizar una arquitectura REST o REpresentational State Transfer.
- Arquitectura client-servidor
 - Sense estat
 - Cachejable
 - Per capes
 - Codi "on demand": compartit (al client, p.ex. javascript)
 - Interfície uniforme
 
 
Avantatges:
- Estandarització
 - ...
 
Exemple en Python i CherryPy
En Python solem utiltizar la llibreria json o bé simplejson.
Els mètodes més importants son:
- json.loads
 - json.dumps
 
En moltes ocasions, els propis "renderers" del nostre framework ens faran aquesta feina, tot i que estan utilitzant aquesta llibreria.
# http://www.cherrypy.org/
# http://docs.cherrypy.org/en/latest/tutorial/REST.html
import cherrypy, json
class Xat:
    exposed = True
    
    # llistar missatges
    def GET(self,*args,**kwargs):
        # processem parametres
        canal = kwargs.get("canal")
        # preparem resposta
        resposta = {}
        resposta["status"] = False
        resposta["missatge"] = "Servei no implementat (encara). Canal=" + str(canal)
        return json.dumps( resposta )
        
    # enviar missatges
    @cherrypy.tools.json_in()
    def POST(self,*args,**kwargs):
        dades = cherrypy.request.json
        # "dades" conte elements JSON deserialitzats amb dicts, llista, etc.
        resposta = {}
        resposta["status"] = True
        resposta["missatge"] = "Missatge llegit correctament: " + str(dades)
        return json.dumps( resposta )
# crida cURL
# curl http://localhost:8080/api/xat -d '"hola"' -H "Content-Type: application/json"
if __name__ == '__main__':
    cherrypy.tree.mount(
        Xat(), '/api/xat',
        {'/':
            {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}
        }
    )
    cherrypy.engine.start()
    cherrypy.engine.block()