Cita:
Empezado por ASAPLTDA
1. cuando uno hace en delphi el servidor rest y el cliente es un programa hecho en otro lenguaje se hace de forma diferente
|
Cada lenguaje tiene sus propios idomas y formas de resolver las cosas, pero en el caso de REST es mas un protocolo, asi que al final la estructura general es la misma. Recuerda que se usa HTTP(o similar) y un metodo de paso de datos como Json/ProtocolBuffers/CVS/etc que es agnostico al lenguaje.
Cita:
Empezado por ASAPLTDA
1.1 para exponer una función que existe en el servidor rest , que información debe proveer el servidor para que un cliente externo use la funcion ?
|
Si es algo interno nada, pero si quieres publicar una API pues debes hacer la documentacion adecuda.
Es popular por ejemplo, usar:
http://swagger.io/
----
La parte que reitero, ya que algunos piensas que REST es "usar json", es solamente la implementacion de los "VERBOS" http y de los URI. Se pueden pasar cualquier dato (incluyendo binarios) aunque es popular hoy usar Json, pero si hay razones para usar algo mas no hay que limitarse.
Por ejemplo, en mi caso yo paso tambien bases de datos sqlite (todo el archivo) y asi me ahorro un monton de trabajo, aparte que puedo hacer consultas sql identicas entre cliente y servidor.
Y usando la habilidad para abrir una BD sqlite dentro de otra, paso datos sin la sobrecarga de serializar/desearilizar, puedo usar transacciones y demas, Por ejemplo, en una app esto es parte de la sincronizacion (en Swift/ios junto a un servidor python):
Código PHP:
func downloadData(_ removeAbono:Bool) throws {
Log.info("Downloading data...")
let con = openDb()
try con.inDatabase { db1 in
try db1.execute("ATTACH DATABASE '\(syncpath)' AS 'sync'")
}
defer {
con.inDatabase { db1 in try! db1.execute("DETACH sync")}
}
try con.inTransaction { db in
try db.execute("DELETE FROM cliente WHERE version = 0")
try db.execute("DELETE FROM Config")
try db.execute("INSERT OR REPLACE INTO Config ( id, nombre, tipo, valor) SELECT id, nombre, tipo, valor FROM sync.Config")
try db.execute("INSERT OR REPLACE INTO cliente ( cobro_id, codigo, direccion, fechaIngreso, id, nombre, orden, telefono, version, localid) SELECT cobro_id, codigo, direccion, fechaIngreso, id, nombre, orden, telefono, version, localid FROM sync.cliente")
return .commit
}
}
Cientos de lineas de codigo ahorrada
Osea, REST puede ser un ideal, pero no hay que ignorar las posibilidades...