Açıq məlumatlar portalı ilə istifadəçi arasında məlumat mübadiləsi HTTPS protokolu üzərində həyata keçirilir. Hər müraciət zamanı servislərə ötürülən parametrlər əsasən Get metodu vasitəsilə aşağıdakı formada həyata keçirilir:
https://api.opendata.az/{versiya}/{format}/{qurumadı}/{servisadı}
{versiya} - servisin versiyasını bildirir (v1, v2 və s).
{format} - servisin növünü bildirir (JSON, XML və s).
{qurumadı} - servisin aid olduğu qurumu və ya qrupu bildirir.
{servisadı} - servisi çağıran metodun adını bildirir.
Əgər format olaraq JSON formatı seçilibsə, servisdən qayıdan cavab JSON formatında olur və hər bir servisin strukturuna görə müəyyən məlumatlar toplusu qaytarır.
Nümunə 1:
Cavab:
{
"Status": "OK",
"StatusMessage": null,
"Response": [
{
...
}
]
}
Status = { “ OK”, “InputError”, “ServerError” } ola bilər.
Əgər JSON formatı seçilibsə, servisdən qayıdan cavab JSON formatında olur və hər bir servisin strukturuna görə müəyyən məlumat toplusu qaytarır.
Nümunə 1:
Servisə edilən sorğunun cavabı:
{
"Status": "OK",
"StatusMessage": null,
"Response": [
{
...
}
]
}
Status = { “ OK”, “InputError”, “ServerError” } ola bilər.
Status =”OK” - servis normal məlumat qaytarır. StatusMessage xanası null olur.
Status =” InputError ” - giriş düzgün daxil edilməyib. StatusMessage xanası hər servisə görə ayrı mesaj qaytarır.
Status =”ServerError” - serverdən qayıdan xəta kodu StatusMessage xanasında göstərilir.
Response - servisin qaytardığı məlumatlar göstərilir.
Nümunə 2:
Servisə edilən sorğunun cavabı:
"Status": "OK",
"StatusMessage": null,
"Response": {
"Header": {
"Atms": {
"Atm": {
"AtmNumber": {
"Name": "№"
},
"AtmCode": {
"Name": "ATM Kodu"
},
"AtmName": {
"Name": "Adı"
},
"AtmAddr": {
"Name": "Ünvanı"
},
"AtmCity": {
"Name": "Şəhər"
},
"Name": "ATM"
},
"Name": "ATM-lərin siyahısı"
}
},
"Body": {
"ATMS": {
"ATM": [
{
"AtmNumber": "18",
"AtmCode": "ATM 00918",
"AtmName": "Yasamal TKQ",
"AtmAddr": "A.M.Şərifzadə 239",
"AtmCity": "Bakı"
},
....
]
}
},
"Name": "AzərPoçtun ATM-lərinin siyahısı (№, ATM Kodu, Adı, Ünvanı, Şəhər)"
}
}
Status = { “ OK”, “InputError”, “ServerError” } ola bilər.
Status =”OK” - servis normal məlumat qaytarır. StatusMessage xanası null olur.
Status =” InputError ” - giriş düzgün daxil edilməyib. StatusMessage xanası hər servisə görə ayrı mesaj qaytarır.
Status =”ServerError” - serverdən qayıdan xəta kodu StatusMessage xanasında göstərilir.
Response - servisin qaytardığı məlumatlar göstərilir.
Name - servisin adı
Header - servisin qaytardığı cavaba uyğun olaraq məlumatların başlığını (məlumatı izah edən ad) göstərir.
Body- servisin qaytardığı əsas məlumatlar görsənir.
// C# proqramlaşdırma dilində GET metodu ilə JSON string əldə olunması
string GET(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try {
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream()) {
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex) {
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// xətanın loglanması
}
throw;
}
}
// C# proqramlaşdırma dilində JSON string-in POST olunması
void POST(string url, string jsonContent)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(jsonContent);
request.ContentLength = byteArray.Length;
request.ContentType = @"application/json";
using (Stream dataStream = request.GetRequestStream()) {
dataStream.Write(byteArray, 0, byteArray.Length);
}
long length = 0;
try {
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
length = response.ContentLength;
}
}
catch (WebException ex) {
// xətanın loglanması
}
}
// Android-də GET metodu ilə JSON string əldə olunması
public String readJSON(String URL) {
StringBuilder stringBuilder = new StringBuilder();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
try {
HttpResponse response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
inputStream.close();
} else {
Log.d("JSON", "Faylı yükləmək mümkün olmadı");
}
} catch (Exception e) {
Log.d("readJSON", e.getLocalizedMessage());
}
return stringBuilder.toString();
}
// iOS Swift-də GET metodu ilə JSON əldə olunması
typealias ServiceResponse = (JSON, NSError?) -> Void
class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()
let baseURL = "json URL əlavə edin"
func getData(onCompletion: (JSON) -> Void) {
let route = baseURL
makeHTTPGetRequest(route, onCompletion: { json, err in
onCompletion(json as JSON)
})
}
func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse) {
let request = NSMutableURLRequest(URL: NSURL(string: path)!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
let json:JSON = JSON(data: data)
onCompletion(json, error)
})
task.resume()
}
}