Bir OpenAPI Spesifikasyonunu içe aktarıp bir Pascal Arayüzü oluşturmaya olanak tanıyan yepyeni bir ürün olan sgcOpenAPI Pascal Parser'ı duyurmaktan mutluluk duyuyorum. sgcOpenAPI Parser aşağıdaki spesifikasyonları destekler:
- OpenAPI 3.*
- Swagger 2.* (otomatik olarak 2.0'dan 3.0'a dönüştürülür)
- Swagger 1.* (otomatik olarak 1.0'dan 3.0'a dönüştürülür)
Aşağıdaki Kimlik Doğrulamalarını destekler:
- Basic
- Bearer Token
- OAuth2
- JWT
OpenAPI Parser
OpenAPI Parser, OpenAPI spesifikasyonlarını ayrıştırmak ve doğrulamak için kullanılan bir araçtır. OpenAPI, RESTful web hizmetleri için standart, dilden bağımsız bir arayüz tanımlayan, API'ler oluşturmaya yönelik bir spesifikasyondur.
OpenAPI Parser, JSON veya YAML biçiminde yazılmış OpenAPI belgelerini okur ve bunların spesifikasyonun kurallarına ve yönergelerine uyduğundan emin olur. Bu; belgenin gerekli tüm alanları içerdiğini, geçerli veri türlerine sahip olduğunu ve beklenen yapıya uyduğunu kontrol etmeyi içerir.
OpenAPI belgesinin söz dizimini doğrulamanın yanı sıra, ayrıştırıcı spesifikasyondan kod üretmek için de kullanılabilir; bu da API'yi farklı programlama dillerinde uygulamayı kolaylaştırır.
Genel olarak OpenAPI Parser, API'lerin OpenAPI spesifikasyonuna göre oluşturulmasını sağlamaya yardımcı olur; bu da farklı API'ler arasında birlikte çalışabilirliği iyileştirebilir ve geliştiricilerin bunları tüketmesini ve entegre etmesini kolaylaştırabilir.
Artık herhangi bir OpenAPI Spesifikasyonunu içe aktarmak ve API ile etkileşim kurmak için gerekli Delphi / Pascal arayüz metotlarını oluşturmak üzere sgcOpenAPI Parser'ı kullanabilirsiniz.
OpenAPI Spesifikasyonu
Bir IP Adresi verildiğinde bilgi almak için kullanılan bir OpenAPI Spesifikasyonu örneğini aşağıda bulabilirsiniz
{
"openapi": "3.0.1",
"servers": [
{
"url": "https://ipgeolocation.abstractapi.com"
}
],
"info": {
"description": "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.",
"title": "IP geolocation API",
"version": "1.0.0",
"x-apisguru-categories": [
"location"
],
"x-logo": {
"url": "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png"
},
"x-origin": [
{
"format": "openapi",
"url": "https://documentation.abstractapi.com/ip-geolocation-openapi.json",
"version": "3.0"
}
],
"x-providerName": "abstractapi.com",
"x-serviceName": "geolocation"
},
"externalDocs": {
"description": "API Documentation",
"url": "https://www.abstractapi.com/ip-geolocation-api#docs"
},
"paths": {
"/v1/": {
"get": {
"description": "Retrieve the location of an IP address",
"parameters": [
{
"explode": true,
"in": "query",
"name": "api_key",
"required": true,
"schema": {
"type": "string"
},
"style": "form"
},
{
"explode": true,
"in": "query",
"name": "ip_address",
"required": false,
"schema": {
"example": "195.154.25.40",
"type": "string"
},
"style": "form"
},
{
"explode": true,
"in": "query",
"name": "fields",
"required": false,
"schema": {
"example": "country,city,timezone",
"type": "string"
},
"style": "form"
}
],
"responses": {
"200": {
"content": {
"application/json": {
"examples": {
"0": {
"value": "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"Île-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<ë<÷\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}"
}
},
"schema": {
"$ref": "#/components/schemas/inline_response_200"
}
}
},
"description": "Location of geolocated IP"
}
},
"servers": [
{
"url": "https://ipgeolocation.abstractapi.com"
}
]
},
"servers": [
{
"url": "https://ipgeolocation.abstractapi.com"
}
]
}
},
"components": {
"schemas": {
"inline_response_200": {
"properties": {
"city": {
"type": "string"
},
"city_geoname_id": {
"type": "integer"
},
"connection": {
"properties": {
"autonomous_system_number": {
"type": "integer"
},
"autonomous_system_organization": {
"type": "string"
},
"connection_type": {
"type": "string"
},
"isp_name": {
"type": "string"
},
"organization_name": {
"type": "string"
}
},
"type": "object"
},
"continent": {
"type": "string"
},
"continent_code": {
"type": "string"
},
"continent_geoname_id": {
"type": "integer"
},
"country": {
"type": "string"
},
"country_code": {
"type": "string"
},
"country_geoname_id": {
"type": "integer"
},
"country_is_eu": {
"type": "boolean"
},
"currency": {
"properties": {
"currency_code": {
"type": "string"
},
"currency_name": {
"type": "string"
}
},
"type": "object"
},
"flag": {
"properties": {
"emoji": {
"type": "string"
},
"png": {
"type": "string"
},
"svg": {
"type": "string"
},
"unicode": {
"type": "string"
}
},
"type": "object"
},
"ip_address": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"postal_code": {
"type": "string"
},
"region": {
"type": "string"
},
"region_geoname_id": {
"type": "integer"
},
"region_iso_code": {
"type": "string"
},
"security": {
"properties": {
"is_vpn": {
"type": "boolean"
}
},
"type": "object"
},
"timezone": {
"properties": {
"abbreviation": {
"type": "string"
},
"current_time": {
"type": "string"
},
"gmt_offset": {
"type": "integer"
},
"is_dst": {
"type": "boolean"
},
"name": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
}
}
}
sgcOpenAPI Parser, spesifikasyonu okur ve sınıfla etkileşim kurmak için gerekli tüm sınıfları, metotları... otomatik olarak oluşturur. Önceki spesifikasyon verildiğinde oluşturulan arayüzü aşağıda bulabilirsiniz.
{ ***************************************************************************
sgcOpenAPI component
written by eSeGeCe
copyright © 2023
Web : http://www.esegece.com
*************************************************************************** }
unit geolocation;
interface
{$IF DEFINED(VER280) OR DEFINED(VER290) OR DEFINED(VER300) OR DEFINED(VER310) OR DEFINED(VER320) OR DEFINED(VER330) OR DEFINED(VER340) OR DEFINED(VER350)}
{$DEFINE SGC_OPENAPI_JSON}
{$IFEND}
uses
Classes, SysUtils,
sgcHTTP_OpenAPI_Client;
Type
{$IFDEF SGC_OPENAPI_JSON}
TsgcOpenAPI_inline_response_200_Class = class;
TsgcOpenAPI_Retrieve_the_location_of_an_IP_address_Response = class;
{$ELSE}
TsgcOpenAPI_inline_response_200_Class = string;
TsgcOpenAPI_Retrieve_the_location_of_an_IP_address_Response = string;
{$ENDIF}
sgcOpenAPI_geolocation = class(TsgcOpenAPI_Client)
protected
function _Retrieve_the_location_of_an_IP_address(aApi_key: string;
aIp_address: string = ''; aFields: string = '';
const aResponse: TsgcOpenAPIResponse = nil): string; virtual;
public
constructor Create(aOwner: TComponent); override;
public
procedure SetServer0();
public
function Retrieve_the_location_of_an_IP_address(aApi_key: string;
aIp_address: string = ''; aFields: string = '')
: TsgcOpenAPI_Retrieve_the_location_of_an_IP_address_Response;
end;
{$IFDEF SGC_OPENAPI_JSON}
TsgcOpenAPI_inline_response_200_Class = class(TsgcOpenAPIClass)
private
Fcity: String;
Fcity_geoname_id: Int64;
Fconnection: String;
Fcontinent: String;
Fcontinent_code: String;
Fcontinent_geoname_id: Int64;
Fcountry: String;
Fcountry_code: String;
Fcountry_geoname_id: Int64;
Fcountry_is_eu: Boolean;
Fcurrency: String;
Fflag: String;
Fip_address: String;
Flatitude: Extended;
Flongitude: Extended;
Fpostal_code: String;
Fregion: String;
Fregion_geoname_id: Int64;
Fregion_iso_code: String;
Fsecurity: String;
Ftimezone: String;
public
class function Read(const aValue: string)
: TsgcOpenAPI_inline_response_200_Class;
public
property City: String read Fcity write Fcity;
property City_geoname_id: Int64 read Fcity_geoname_id
write Fcity_geoname_id;
property Connection: String read Fconnection write Fconnection;
property Continent: String read Fcontinent write Fcontinent;
property Continent_code: String read Fcontinent_code write Fcontinent_code;
property Continent_geoname_id: Int64 read Fcontinent_geoname_id
write Fcontinent_geoname_id;
property Country: String read Fcountry write Fcountry;
property Country_code: String read Fcountry_code write Fcountry_code;
property Country_geoname_id: Int64 read Fcountry_geoname_id
write Fcountry_geoname_id;
property Country_is_eu: Boolean read Fcountry_is_eu write Fcountry_is_eu;
property Currency: String read Fcurrency write Fcurrency;
property Flag: String read Fflag write Fflag;
property Ip_address: String read Fip_address write Fip_address;
property Latitude: Extended read Flatitude write Flatitude;
property Longitude: Extended read Flongitude write Flongitude;
property Postal_code: String read Fpostal_code write Fpostal_code;
property Region: String read Fregion write Fregion;
property Region_geoname_id: Int64 read Fregion_geoname_id
write Fregion_geoname_id;
property Region_iso_code: String read Fregion_iso_code
write Fregion_iso_code;
property Security: String read Fsecurity write Fsecurity;
property Timezone: String read Ftimezone write Ftimezone;
end;
TsgcOpenAPI_Retrieve_the_location_of_an_IP_address_Response = class
(TsgcOpenAPIResponse)
private
FSuccessful: TsgcOpenAPI_inline_response_200_Class;
public
destructor Destroy; override;
public
property Successful: TsgcOpenAPI_inline_response_200_Class read FSuccessful
write FSuccessful;
end;
{$ENDIF}
function GetOpenAPIClient: sgcOpenAPI_geolocation;
procedure FreeOpenAPIClient;
implementation
Pascal arayüzüne sahip olduğunuzda, API ile etkileşime başlamak çok kolaydır; Delphi'de yazılmış basit bir örnek için aşağıya bakın.
function GetCountry(const aApiKey, aIpAddress: string): string;
var
oResponse: TsgcOpenAPI_Retrieve_the_location_of_an_IP_address_Response;
begin
oResponse := GetOpenAPIClient.Retrieve_the_location_of_an_IP_address(aApiKey, aIpAddress);
Try
if oResponse.IsSuccessful then
result := oResponse.Successful.Country
else
raise Exception.Create(oResponse.ResponseError);
Finally
oResponse.Free;
End;
end;
sgcOpenAPI Parser Trial'a bir bağlantıyı aşağıda bulabilirsiniz
