OData adalah singkatan dari Open Data Protocol, merupakan protokol akses data berbasis teknologi yang telah digunakan secara luas seperti HTTP, JSON, dan Atom. Pada OData telah didefinisikan bahasa query dalam bentuk URI yang telah disesuaikan, query tersebut merupakan cara standar yang mengijinkan client memilah data yang diinginkan. Standar di sini artinya memiliki pola yang telah dijadikan standar umum sehingga di manapun ada suatu layanan OData Service, pasti menggunakan pola yang sama untuk mengakses datanya. Untuk penjelasan lengkap mengenai OData telah saya tulis sebelumnya di alamat Postingan Sebelumnya.
Untuk mempersingkat waktu, kita akan mencoba mengakses OData Service publik yang dapat diakses dari internet. Contoh layanan ini tersedia dan bisa dikunjungi di alamat https://www.odata.org/odata-services/ . Salah satu endpoint OData yang akan kita gunakan adalah database Northwind yang memiliki alamat https://services.odata.org/V3/Northwind/Northwind.svc/
Tools yang diperlukan cukup menggunakan browser saja, karena berbasis HTTP dan URI. Atau dapat menggunakan Postman karena menyediakan formating respon sehingga bisa tampil lebih rapi. Berikut contoh contoh hasil dari akses OData terhadap database Northwind.svc
- Mengakses Service Document
https://services.odata.org/V3/Northwind/Northwind.svc/

2. Mengakses Service Metadata
https://services.odata.org/V3/Northwind/Northwind.svc/$metadata


3. Mengakses List Entity Customer dengan Hasil Format ATOM
https://services.odata.org/V3/Northwind/Northwind.svc/Customers?$inlinecount=allpages

4. Mengakses List Entity Customer dengan Hasil Format JSON
https://services.odata.org/V3/Northwind/Northwind.svc/Customers?$inlinecount=allpages&$format=json

5. Mengakses List Customer dan Hanya Menampilkan Kolom CustomerID
https://services.odata.org/V3/Northwind/Northwind.svc/Customers?$inlinecount=allpages&$format=json&$select=CustomerID

6. Mengakses Data Customer Berdasarkan ID / Primary Key
https://services.odata.org/V3/Northwind/Northwind.svc/Customers('TOMSP')?$format=json

7. Mengakses Data Customer Berdasarkan ID /Primary Key dengan Hasil Hanya Value Kolom Tertentu
https://services.odata.org/V3/Northwind/Northwind.svc/Customers('TOMSP')/ContactName/$value

8. Memfilter Data Customer Dan Menampilkan Berdasarkan Urut Kolom Tertentu
Menampilkan data dengan ContactTitle berisi Owner diurutkan berdasarkan ContactName descending
https://services.odata.org/V3/Northwind/Northwind.svc/Customers?$inlinecount=allpages&$format=json&$filter=ContactTitle eq 'Owner'&$orderby=ContactName desc

Daftar logical operator yang didukung
| Operator | Description | Example |
|---|---|---|
| eq | Equal | /Customers?$filter=City eq ‘Redmond’ |
| ne | Not equal | /Customers?$filter=City ne ‘London’ |
| gt | Greater than | /Products?$filter=UnitPrice gt 20 |
| ge | Greater than or equal | /Products?$filter=UnitPrice ge 10 |
| lt | Less than | /Products?$filter=UnitPrice lt 20 |
| le | Less than or equal | /Products?$filter=UnitPrice le 100 |
| and | Logical and | /Products?$filter=UnitPrice le 200 and UnitPrice gt 3.5 |
| or | Logical or | /Products?$filter=UnitPrice le 3.5 or UnitPrice gt 200 |
| not | Logical negation | /Products?$filter=not endswith(ProductName,’milk’) |
9. Mengakses List Customer dan Menampilkan 10 Data Pada Halaman ke 2
https://services.odata.org/V3/Northwind/Northwind.svc/Customers?$inlinecount=allpages&$format=json&$skip=10&$top=10&$orderby=ContactName asc

10. Menampilkan Complex Type dari Navigation Property
Menampilkan detail customer dari data order
https://services.odata.org/V3/Northwind/Northwind.svc/Orders?$inlinecount=allpages&$format=json&$orderby=OrderID asc&$expand=Customer

https://services.odata.org/V3/Northwind/Northwind.svc/Orders(10249)?$format=json&$expand=Customer

Menampilkan Order detail dari Order dengan Expand hingga dua level
https://services.odata.org/V3/Northwind/Northwind.svc/Orders(10248)?$format=json&$expand=Order_Details,Order_Details/Product
{
"odata.metadata": "https://services.odata.org/V3/Northwind/Northwind.svc/$metadata#Orders/@Element",
"Order_Details": [
{
"Product": {
"ProductID": 11,
"ProductName": "Queso Cabrales",
"SupplierID": 5,
"CategoryID": 4,
"QuantityPerUnit": "1 kg pkg.",
"UnitPrice": "21.0000",
"UnitsInStock": 22,
"UnitsOnOrder": 30,
"ReorderLevel": 30,
"Discontinued": false
},
"OrderID": 10248,
"ProductID": 11,
"UnitPrice": "14.0000",
"Quantity": 12,
"Discount": 0
},
{
"Product": {
"ProductID": 42,
"ProductName": "Singaporean Hokkien Fried Mee",
"SupplierID": 20,
"CategoryID": 5,
"QuantityPerUnit": "32 - 1 kg pkgs.",
"UnitPrice": "14.0000",
"UnitsInStock": 26,
"UnitsOnOrder": 0,
"ReorderLevel": 0,
"Discontinued": true
},
"OrderID": 10248,
"ProductID": 42,
"UnitPrice": "9.8000",
"Quantity": 10,
"Discount": 0
},
{
"Product": {
"ProductID": 72,
"ProductName": "Mozzarella di Giovanni",
"SupplierID": 14,
"CategoryID": 4,
"QuantityPerUnit": "24 - 200 g pkgs.",
"UnitPrice": "34.8000",
"UnitsInStock": 14,
"UnitsOnOrder": 0,
"ReorderLevel": 0,
"Discontinued": false
},
"OrderID": 10248,
"ProductID": 72,
"UnitPrice": "34.8000",
"Quantity": 5,
"Discount": 0
}
],
"OrderID": 10248,
"CustomerID": "VINET",
"EmployeeID": 5,
"OrderDate": "1996-07-04T00:00:00",
"RequiredDate": "1996-08-01T00:00:00",
"ShippedDate": "1996-07-16T00:00:00",
"ShipVia": 3,
"Freight": "32.3800",
"ShipName": "Vins et alcools Chevalier",
"ShipAddress": "59 rue de l'Abbaye",
"ShipCity": "Reims",
"ShipRegion": null,
"ShipPostalCode": "51100",
"ShipCountry": "France"
}
Dari contoh cara mengakses OData Service tersebut memungkinkan kita bisa lebih mudah dalam pengambilan data, dikarenakan pola akses query yang sudah standar dan sudah pasti. Terutama ketika kita mengambil data menggunakan Ajax atau client library , akan lebih mudah karena kita cukup memanipulasi URL saja ketika akan melakukan sorting, filtering, atau paging.


