Web Services

De Cacauet Wiki
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…».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

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()