API haqqında

Açıq Hökümət məlumatları ilə istifadəçi arasında məlumat mübadiləsi HTTP(S) 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://apiopendata.e-gov.az/ { versiya}/api/{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. 
 

Ətraflı API haqqında

Ə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.

Kod nümunələri

// 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()
    }
}