I am happy to announce the sgcOpenAPI Pascal Parser, a brand new product allowing import an OpenAPI Specification and generate a Pascal Interface. The sgcOpenAPI Parser supports the following specifications:
Supports the following Authentications:
An OpenAPI Parser is a tool used for parsing and validating OpenAPI specifications. OpenAPI is a specification for building APIs that defines a standard language-agnostic interface for RESTful web services.
The OpenAPI Parser reads OpenAPI documents written in either JSON or YAML format, and ensures that they adhere to the specification's rules and guidelines. This includes checking that the document contains all the required fields, has valid data types, and conforms to the expected structure.
In addition to validating the syntax of the OpenAPI document, the parser can also be used to generate code from the specification, making it easier to implement the API in different programming languages.
Overall, the OpenAPI Parser helps ensure that APIs are built according to the OpenAPI specification, which can improve interoperability between different APIs and make it easier for developers to consume and integrate them.
Now you can use the sgcOpenAPI Parser to import any OpenAPI Specification and generate the required Delphi / Pascal interface methods to interactuate with the API.
Find below an example of OpenAPI Specification used to get information given an IP Address
{ "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" } } } }
The sgcOpenAPI Parser reads the specification and creates automatically all required classes, methods... to interactuate with the class. Find below the interface created given the prior specification.
{ *************************************************************************** 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
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;
Find below a link to the sgcOpenAPI Parser Trial
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.