Saludos,
Me termine dando por vencido con Indy (he probado con las diferentes versiones, la 9, la 10, buscado en internet y no hay caso
)
He decidido darle una oportunidad a la biblioteca
Synapse que es OpenSource. Con esta biblioteca no he tenido ningun problema para realizar las invocaciones GET
El siguiente paso fue eliminar las dependencias con los componentes
NetHttpClient
He declarado una
interface en la unidad
Afip.PublicAPI.HttpClient y delegado la implementacion al usuario:
Código Delphi
[-]
IHttpClient = interface
['{AFA99837-6CBB-4111-A268-D8AB8E4CD8DD}']
function HttpGetText(const AUrl: string): string;
function HttpGetBinary(const AUrl: string): TStream;
end;
Cualquier clase que implemente
IHttpClient le sirve a mi clase TAfipQuery para comunicarse con el servidor REST
Se proveen dos implementaciones:
- La que ya teniamos hasta ahora, usando los components
NetHttpClient
Esa implementacion la he movido a la unidad
Afip.PublicAPI.NetHttpClient; esta encapsulado dentro de la clase
TNativeHttpClient
- La nueva implementacion usando la biblioteca
Synapse, en la unidad
Afip.PublicAPI.SynapseHttpClient
He incluido tambien en el repo la propia biblioteca Synapse, con solo agregar la ruta en Delphi, ya esta listo para funcionar
Cita:
... \AFIP\Third-Party\Synapse
|
El constructor de TAfipQuery ahora requiere una referencia a una interface de este tipo (
dependency injection)
Código Delphi
[-]
constructor Create(const AHttpClient: IHttpClient; const APersister: IPersister_Afip = NIL);
Y eleva una excepcion si le pasamos
NIL...
Código Delphi
[-]
constructor TAfipQuery.Create(const AHttpClient: IHttpClient; const APersister: IPersister_Afip = NIL);
begin
if AHttpClient = NIL then
raise Exception.CreateFmt('%s.Create :: AHttpClient is NIL', [ClassName]);
He eliminado las funciones que operaban (por asi llamarlo de una manera) "al estilo static", o de funcion de clase (class function) porque ahora no tengo mas el constructor por defecto y no quiero seguir acoplando dependencias
Por ultimo he actualizado el demo para que cumpla con esta refactorizacion; tambien he incluido la posibilidad de usar una u otra biblioteca en tiempo de ejecucion (Synapse o NetHttp)
La biblioteca Synapse deberia funcionar con versiones mas antiguas de Delphi e incluso FPC (Lazarus)