Saludos,
Compartiré la vía con la que solucioné el problema de la llamada a la API.
Código Delphi
[-]
unit MdNPI;
interface
uses
System.SysUtils, System.Variants, System.Classes, System.UITypes,
System.AnsiStrings, System.IOUtils, uLkJSON;
type
TNPI = class(TObject)
private
FBaseURL: string;
FParams: string;
FResponse: string;
FResponseJson: TlkJSONbase;
function CallAPI(aUrl: string): string;
public
property BaseURL: string read FBaseURL write FBaseURL;
property ResponseJson: TlkJSONbase read FResponseJson;
constructor Create;
function ValidateNPIForAPI(aNumber, aNpiType, aTaxonomy :string): boolean;
end;
implementation
uses
System.Character, Vcl.AxCtrls, Winapi.ActiveX, WinHttp_TLB, IdURI;
constructor TNPI.Create;
begin
FBaseURL := 'https://npiregistry.cms.hhs.gov/api/?version=2.1';
FParams := '';
FResponse := '';
FResponseJson := TlkJSONbase.Create;
end;
function TNPI.CallAPI(aUrl: string): string;
var
Http: IWinHttpRequest;
HttpStringStream: TStringStream;
HttpStream: IStream;
OleStream: TOleStream;
begin
Http := CoWinHttpRequest.Create;
Http.Open('GET', aUrl, False);
Http.Send(EmptyParam);
if Http.Status = 200 then
begin
HttpStream := IUnknown(Http.ResponseStream) as IStream;
OleStream := TOleStream.Create(HttpStream);
try
HttpStringStream := TStringStream.Create('');
try
OleStream.Position:= 0;
HttpStringStream.CopyFrom(OleStream, OleStream.Size);
Result := HttpStringStream.DataString;
finally
HttpStringStream.Free;
end;
finally
OleStream.Free;
end;
end;
end;
function TNPI.ValidateNPIForAPI(aNumber, aNpiType,
aTaxonomy: string): boolean;
var
xCount: Integer;
xUrl: string;
begin
try
xCount := 0;
if aNumber <> '' then
FParams := FParams + '&number='+aNumber;
if aNpiType <> '' then
FParams := FParams + '&enumeration_type='+aNpiType;
if aTaxonomy <> '' then
FParams := FParams + '&taxonomy_description='+aTaxonomy;
xUrl := TIdURI.URLEncode(FBaseURL + FParams);
FResponse := CallAPI(xUrl);
TlkJSONbase(FResponseJson) := TlkJSON.ParseText(FResponse);
xCount := StrToInt(FResponseJson.Field['result_count'].Value);
except
on e: Exception do
begin
xCount := 0;
end;
end;
Result := (xCount > 0);
end;
end.
Gracias.