Genel Bakış

REST (Temsili Durum Aktarımı),  World Wide Web (www) gibi dağıtımlı sistemler için geliştirilmiş bir yazılım mimari stilidir. 

JSON kendini tanımlayan (self-describing) veri değişim formatıdır.

Logo RESTful API

  • Veriyi, JSON dosyaları olarak saklar.
  • Böylece ürün içerisinde gerçekleştirilen her işleme "JSON formatında bir URL yoluyla" erişimi mümkün kılar. 
  • Bu da, web ve mobil uygulamalar için RESTful API'ı bu denli güçlü yapan özelliklerden sadece biridir.


REST günümüzde en yaygın web API tasarım modeli haline gelmiştir.

REST'in avantajlarından bazıları;

  • bileşen etkileşimlerinin ölçeklenebilirliği
  • arayüzlerin genelliği
  • bileşenlerin bağımsız dağıtımıdır.

REST aynı zamanda gecikme süresini indirgeyen, güvenliği güçlendiren ve yasal sistemleri içeren uygulama bileşenleri arasında bir aracı görevi görür.

REST API, HTTP çağrılarını yapabilen her dilde kullanılabilir.

RESTful API'ın tasarlanması esnasında dikkate alınacak öncelikli husus, geliştirici üretkenliğini ve başarısını en üst düzeye çıkarmak olmalıdır. Pragmatik REST ifadesinden anlaşılan budur.

Tasarım doğru olmalıdır, çünkü tasarım bir şeyin nasıl kullanılacağını ifade eder.

"Entegre uygulama geliştirici odaklı bakış açısıyla j-Platform REST arayüzlerini sunmak" esas prensibimiz olmuştur.

Tasarım Prensipleri 

URL'ler:

Pragmatik RESTful tasarımında bir numaralı prensip, her şeyi yalın tutmaktır. Taban URL'niz basit ve sezgisel olmalıdır.

Taban URL, API'ın tasarım sağlarlığı (affordance) için en önemli etkendir. Basit ve sezgisel bir taban URL tasarımı, API kullanımını da kolaylaştırır.

Sağlarlık, dokümana ihtiyaç duymadan herhangi bir şeyin nasıl kullanıldığının ifade edilebilen bir tasarım özelliğidir.  

j-Platform WADL(Web Application Description Language)

http://host:port/logo/rest/?_wadl

http://host:port/logo/restservices/rest/?_wadl

İsimler

Fiil yerine isim kullanmalısınız (SOAP--‐RPC)

/getAllOrders yerine GET /orders

Çoğul

İki farklı türden kaynağı yönetmek için tekil isimler yerine çoğul isimler kullanmalısınız:

  1. Collection resource:

/users

2. Instance resource:

/users/007

Sürüm

URL'de sürümlemeyi (büyük, yani majör versiyonlar için) en yüksek kapsamında zorunlu hale getirmelisiniz.

Aynı anda en fazla iki versiyonu destekleyebilirsiniz.

Taban URL: https://<application uri>/rest/v{versiyon numarası} 

Örnek URLhttps://host:port/logo/rest/v1.0/orders

Hiyerarşik Yapı

Yapısını vurgulamak için URL'nin hiyerarşik doğasını (aggregation veya composition) güçlendirmelisiniz.

Örnek: Bir siparişin içerisindeki satırlar isteniyor.

GET /orders/1234/transactions/1

Kendini Tanımlayan (Self-descriptive):

Her bir kaynak, REST servisini açıklamak üzere servisler ve tanımlar yöntemlerini uygulamalıdır.

a. Swagger UI desteği bulunmaktadır.

b. Servisler yöntemlerinin amacı, yalnızca tasarıyı değil, aynı zamanda REST nesneleri üzerine yapabileceğiniz işlemleri de açıklamaktır.

GET /services çağrısı, tüm REST yöntemlerini ve REST içerisindeki tüm nesnelere ait tanımları döndürecektir.

http://host:port/logo/rest/?_wadl

c. Tanımlar yöntemlerinin amacı, REST nesnelerinin tasarısını açıklamaktır.

GET /orders/describe çağrısı, siparişler nesnesinin tasarısını döndürecektir.

Örnek URL:http://host:port/logo/rest/v1.0/orders/describe

Daha fazla bilgi için http://json-schema.org/ 

Güvenlik: OAuth2 & HTTPS 

  • Yetkilendirme'yi yönetmek için OAuth2 kullanabilirsiniz.
  • OAuth2, gereksinimlerin ve istemci tiplendirmelerinin %99'una uyum sağlar.
  • Her API/OAuth2 isteği için HTTPS kullanılabilir.
  • Mümkün olduğu takdirde, oturum açmaktan kaçının
  • Eğer gerekiyorsa her istek için kimlik doğrulaması yapın.
  • (Stateless)
  • Kaynak içeriğine göre yetkilendirme yapın. URL'ye göre değil.
  • Kullanıcı Adı / Şifre yerine API anahtarlarını kullanın.

 401 “Unauthorized” doğruluğu / kimliği teyit edilmemiş anlamına gelir.

“Bu isteğe yanıt verebilmem için geçerli kimlik bilgilerine ihtiyacın var."

403 “Forbidden”  yetkiniz olmadığı anlamına gelir.

“Kimlik bilgilerini aldım, ancak üzgünüm, sana izin yok!"  

599 “Logo Exchange Error” j-Platform' da yapılmak istenen işlem sırasında alınan hataya karşılık gelir.

"Fiş tarihi mali dönem içinde olmalıdır."


Kaynak Erişimi: (Liste + CRUD ) 

Ortak Sorgu Seçenekleri

Ad

Zorunlu

Varsayılan Değer

Değer Tipi

Anlamı

Firm

Hayır

Kullanıcının varsayılan şirketi

İnteger

Kayıtların firma no'su

Language

Hayır

Kullanıcının varsayılan dili

String

Dil adı

Set

Hayır

“”

String

Uygulama değişkeni "set" değeri

 Örnek url: https://host:port/logo/rest/v1.0/orders?firm=1&language=TRTR&set=DRF  

GET

 detaylı bilgi için...

GET işlemleri için sorgu seçenekleri

Ad

Zorunlu

Varsayılan Değer

Değer Tipi

Anlamı

expandLevel

Hayır

0

İnteger

Nesnelerin detaylarına erişim seviyesi, öndeğer 0 sadece nesneye ait başlık bilgileri kullanılır

expand

Hayır

“”

String

Genişletilecek/açılacak virgülle ayrılmış içiçe (nested) nesne adları

fields

Hayır

“”

String

Döndürülecek olan virgülle ayrılmış sütun isimleri

Örnek URL'ler:

https://host:port/logo/rest/v1.0/orders?firm=1&expandLevel=2

https://host:port/logo/rest/v1.0/orders/12345?expand=Transactions&expandLevel=1

https://host:port/logo/rest/v1.0/orders/12345?fields=slipNumber,orderDate,transactions(quantity,price)&expandLevel=2

Not: .Net tarafında, alt nesneler istendiğinde expand seviyesi istenir.

Kayıtlar Listesi

Taban URL: https://<application uri>/rest/{obj name}s

Örnek URL: https://host:port/logo/rest/v1.0/orders

Yanıt: 200 OK with JSON list of records

HREF Id'leri: Veritabanı kaydı için UID (MD5 of a generated UUID)

Kayıt sayısını al: https://<application uri>/rest/{version}/count/{obj name}s

Örnek count uri: https://host:port/logo/rest/v1.0/count/orders

 

Sorgu seçenekleri:

Sayfalandırma Seçenekleri:

Ad

Zorunlu

Varsayılan Değer

Değer Tipi

Anlamı

offset

Hayır

0

İnteger

Start offset

limit

Hayır

10

İnteger

Record count limit

sort

Hayır

“”

String

comma (,) separated column names for query order

withCount

Hayır

False

Boolean

Boolean indicating totalCount will be included in the result

Örnek URL : https://host:port/logo/rest/v1.0/orders?offset=10&limit=10&sort=orderDate,slipNumber


Sorgu filtre seçenekleri:

Ad

Zorunlu

Varsayılan Değer

Değer Tipi

Anlamı

q

Hayır

“”

String

Query ifadeleri elastic search. Aşağıdaki linkteki dokümanı kullanabilirsiniz. 
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 

Adresi yazarken boşluk + gibi karakterler standart dışıdır. Bunun için html encode kullanmanız gerekir. Java için örnek kod: 

String q = "random word £500 bank $"; 
String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");

Örnek URL:https://host:port/logo/rest/v1.0/orders?q=slipNumber:A%20AND%20orderDate:[*%20TO%202016-02-23T00:00:00.000%2b02:00]

Tek Ana Kayıt

Taban URL: https://<application uri>/rest/{obj name}s/{object id}

Örnek URL : https://host:port/logo/rest/v1.0/orders/12345

Yanıt : 200 OK with JSON representation of the main record

Link Records – 1-N

Taban URL: https://<application uri>/rest/{obj name}s/{object id}/{link object property name}

Örnek URL : https://host:port/logo/rest/v1.0/orders/12345/Transactions

Yanıt : 200 OK with JSON of linked list of records

Link Records – 1-1

Taban URL: https://<application uri>/rest/{obj name}s/{object id}/{link object property name}

Örnek URL : https://host:port/logo/rest/v1.0/orders/12345/Notes

Yanıt : 200 OK with JSON of linked record

POST

 Detaylı bilgi için...

Yeni kayıt oluşturma

Taban URL: https://<application uri>/rest/{obj name}s

Örnek URL : https://host:port/logo/rest/v1.0/orders  with JSON of the object to create

Yanıt : 201 Created or Error with explanation and error code

PUT

 Detaylı bilgi için...

Kayıt oluşturma veya kaydetme

Taban URL : https://<application uri>/rest/{obj name}s/{object id}

Örnek URL : https://host:port/logo/rest/v1.0/orders/12345   with JSON of the object

Yanıt : 200 OK for updates and 201 create for creates. 

Put işleminde {object id} "0" gönderilirse, yanıt olarak insert edilen kaydın mantıksal kayıt değeri (LOGICALREF) dönecektir.

ÖNEMLİ: Bu işlem eşgüçlüdür. Aynı PUT işlemi ile tekrar ve tekrar aynı REST API'sini çağırmak farklı bir yan etki yaratmaz.

PATCH

 Detaylı bilgi için...

Mevcut kaydı kısmı güncelleme

Taban URL : https://<application uri>/rest/{obj name}s/{object id}

Örnek URL : https://host:port/logo/rest/v1.0/orders/12345   with partial JSON of the object to be patched

Yanıt : 200 OK

DELETE

 Detaylı bilgi için...

Mevcut kaydı silme

Taban URL : https://<application uri>/rest/{obj name}s/{object id}

Örnek URL : https://host:port/logo/rest/v1.0/orders/12345

Yanıt : 204 OK

Sunu

j-PlatformRestServices.pptx

Örnek Uygulamalar 

j-Platform REST Kütüphane









Telif HakkıKullanım KoşullarıGizlilik
Copyright © 2018 Logo Yazılım