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