OData merupakan singkatan dari Open Data Protocol, merupakan protokol akses data berbasis teknologi yang telah digunakan secara luas seperti HTTP, JSON, dan Atom. OData mengikuti pendekatan REST dengan antarmuka yang telah distandarkan, dan berbeda dengan pendekatan SOAP yang memang telah mendominasi arsitektur SOA (Thoma, 2014). OData terdiri atas 4 bagian utama, yaitu:

  1. OData protokol merupakan spesifikasi protokol yang mendefinisikan cara client melakukan query dan memanipulasi data source. OData mendukung operasi CRUD serta format pertukaran data JSON dan Atom Syndication. Pada OData telah didefinisikan bahasa query dalam bentuk URI yang telah disesuaikan, query tersebut merupakan cara standar  yang mengijinkan client memilah data yang diinginkan.
  2. OData data model menggunakan EDM dan CSDL. Struktur dari data didefinisikan dalam model data abstrak yang disebut Entity Data Model (EDM). Layanan dari OData menyediakan dokumen metadata yang mendefinisikan EDM dalam format XML yang disebut CSDL (Conceptual Schema Definition Language).
  3. OData service adalah layanan OData yang mengekspos endpoint yang bisa dipanggil untuk mengakses data atau memanggil fungsi, layanan tersebut mengimplementasikan protokol dan menggunakan model data OData.
  4. OData client merupakan client yang mengakses layanan OData melalui protokol dan model data yang telah didefinisikan.

Gambar 1. Arsitektur OData (Cupek dkk., 2015)

Protokol OData berbeda jika dibandingkan dengan protokol lain yang mengikuti pendekatan web service berbasis REST dimana OData menyediakan cara seragam dalam mendeskripsikan antara data dan model data sehingga meningkatkan interoperabilitas semantik  antar sistem. OData mengikuti prinsip desain REST, memastikan selalu sederhana, backward compatible, memberikan mekanisme bekerja pada berbagai data store. OData memberikan fasilitas seperti:

  1. Metadata yang mendeskripsikan model data
  2. Data berupa sekumpulan entitas data dan relasi diantara data
  3. Operasi untuk memanggil logic
  4. Manipulasi data seperti membuat, mengubah, dan menghapus data
  5. Vocabularies berupa skema yang mendefinisikan nilai atau tipe

Gambar 2 OData stack protocol (Thoma, 2014)

OData menggunakan URI untuk mengarahkan ke resource yang sesuai dan menspesifikasikan query yang telah distandarkan. URI terdiri atas 3 bagian: service root, lokasi resource, dan query. Lokasi resource (resource path) mengidentifikasikan sumber daya (berupa kumpulan data yang memiliki atribut yang sama) dari layanan yang akan diakses dan berinteraksi dengan pengguna layanan. Query pada OData telah didefinisikan beberapa opsi standar yang dapat digunakan untuk memfilter sumber daya yang diinginkan, membatasi jumlah hasil yang ingin dibaca, memilih format pertukaran data, mengurutkan hasil, dan memilih property entitas yang ingin ditampilkan.

Misalkan suatu perusahaan memiliki OData service yang dapat digunakan untuk mengakses data kepegawaian, contoh penggunaan Query Option pada OData untuk memfilter sumber daya yang diinginkan dapat dijelaskan sebagai berikut :

A. Mengambil data tanpa filter

Contoh URI berikut ini akan menghasilkan semua data Pegawai tanpa adanya filter

http://host/service/Pegawai

B. Memilih data berdasarkan nilai Primary Key tertentu

Contoh berikut ini digunakan untuk memfilter pegawai berdasarkan Primary Key dengan ID pegawai bernilai 100

http://host/service/Pegawai(100)

C. Memilih data dalam jumlah dan posisi urutan baris tertentu

Contoh berikut ini menggunakan Query Option $top dan $skip sehingga menghasilkan data hanya sebanyak 10 baris dengan urutan baris dari 31 sampai 40 berdasarkan total 100 data pegawai

http://host/service/Pegawai?$skip=30&$top=10

D. Memilih data berdasarkan filter attribut bernilai tertentu

Contoh berikut ini menggunakan Query Option $filter sehingga membatasi hasil data pegawai hanya untuk yang memilki nilai atribut nama pegawai yang berawalan ‘SU’

http://host/service/Pegawai?$filter=startswith(NamaPegawai,’SU’)

E. Memilih atribut data yang dihasilkan dan urutan data

Contoh berikut ini menggunakan Query Option $select dan $orderby sehingga menghasilkan data yang hanya menampilkan atribut NamaPegawai, NIP, dan TanggalLahir dengan diurutkan berdasarkan atribut NIP

http://host/service/Pegawai?$select=NamaPegawai,NIP,TanggalLahir&$orderby=NIP asc

F. Menentukan format data dari data yang dihasilkan

Contoh berikut ini menggunakan Query Option $format sehingga menghasilkan data pegawai dengan format data dalam berbentuk json

http://host/service/Pegawai?$format=json

Query Option dapat digabungkan penggunaannya pada URI untuk mengakses OData. Protokol pada OData telah menspesifikasikan opsi apa saja yang tersedia untuk Query Option.

OData mendukung format data JSON dan ATOM. Format dapat ditentukan melalui Query Option $format maupun melalui HTTP Request Header ‘Accept’. Penggunaan HTTP Request Header ‘Accept’ untuk menentukan format data sesuai dengan RFC2616 dari protokol transport HTTP. Contoh penggunaannya sebagai berikut

GET http://host/service/Pegawai HTTP/1.1
MaxDataServiceVersion: 3.0
Accept: application/json; odata=light 

Pengguna layanan bisa menggunakan $format pada URI karena nilai dari parameter $format lebih diprioritaskan dibandingkan nilai ‘Accept’ dari HTTP Request Header.

http://host/service/Pegawai?$format=atom

Perbedaan mendasar mengenai format data yang digunakan OData adalah sebagai berikut

  1. JSON

Setiap entri data pada output OData direpresentasikan ke dalam objek JSON, dengan setiap properti / atribut yang ditransmisikan berupa kumpulan pasangan nama dan nilainya. Standar OData terkait format data menggunakan JSON membatasi pada penamaan atribut yang tidak boleh digunakan dan mendefinisikan atribut tambahan pada objek JSON untuk mendukung metadata. Contoh output data pegawai dari OData dengan format JSON adalah sebagai berikut :

{“Items”: [{ “IdPegawai”: 1, “NamaPegawai“: “Subejo”, “TempatLahir”: “SOLO”, “Usia”: null, “NPWP”: null }]}

b. ATOM

OData menggunakan format Atom berbasis XML yang memetakan feed sebagai kumpulan entri, di mana content dari setiap entri berisi data dalam format xml. OData menggunakan entri dan feed Atom sehingga resource yang direpresentasikan dapat dengan mudah dikategorikan, ditemukan, dikelompokkan, dan disunting. Kumpulan data (collection)  yang direpresentasikan sebagai feed tersebut akan memiliki resource path yang berbeda untuk setiap kategori. Sebagai contoh untuk kumpulan entri dengan kategori pegawai maka dapat diekspos oleh OData dengan URI http://host/service/pegawai. Format Atom dari OData memilki mime type application/atom+xml yang sesuai dengan spesifikasi RFC4287, sedangkan protokol OData untuk publikasi kumpulan entri data berformat Atom sesuai dengan spesifikasi RFC5023. OData menggunakan format Atom karena dianggap paling tepat untuk merepresentasikan resource dari OData yang berupa sekumpulan entri terstruktur. Gambar 3 merupakan contoh output data pegawai dari OData dalam format Atom.

Gambar 3. Contoh output OData berupa data pegawai dalam format Atom.

Seperti pada standar Atom yang memiliki suatu service document untuk mendefinisikan koleksi/kumpulan resource apa saja yang tersedia, pada OData service juga terdapat service document dengan mengakses ke alamat service root dari OData. Contoh service document OData yang diakses dari endpoint $metadata dapat dilihat pada Gambar 4.

Gambar 4. Contoh service document OData yang mendefinisikan tersedianya collection data Products, Orders, Order_Details, dan Categories pada suatu layanan (Cheng, 2012)

Metadata/Service Document

Berdasarkan standar dari OData, setiap service harus dapat menampilkan semua informasi mengenai struktur dan organisasi dari semua sumber daya (resource). Hal ini bisa dimungkinkan melalui service document yang berada pada alamat endpoint $metadata, sehingga tipe data komplek dan lokasi kumpulan sumber daya (resource path) bisa diketahui. Endpoint $metadata juga mendefinisikan CSDL dan EDM dari tipe data yang digunakan setiap sumber daya layanan (Cupek dkk., 2015). Contoh dari alamat service document atau endpoint metadata bisa diakses dari alamat seperti berikut :

http://host/service?$metadata

Referensi:

Allamaraju, S., 2010, RESTful Web Services Cookbook, O’Reilly Media, Inc., California.

Cheng, S., 2012, OData Programming Cookbook for .NET Developers,Packt Publishing, United Kingdom.

Cupek, R. dan Huczala, L., 2015, OData for Service-Oriented Business Applications, 2015 IEEE International Conference on Industrial Technology (ICIT), Spanyol, Maret 2015, hal. 1538 – 1543.

Odata.org., 2017, OData – The Protocol for REST APIs : OData Version 3.0 Core Protocol, http://www.odata.org/documentation/odata-version-3-0/odata-version-3-0-core-protocol/ , dikunjungi pada 2018-07-02.

Pathak, N., 2011, Pro WCF 4: Practical Microsoft SOA Implementation, Second Edition, Apress, America.

Sandoval, J., 2009, RESTful Java Web Services: Master core REST concepts and create RESTful web services in Java, Packt Publishing, United Kingdom.

Thoma, M., Kakantousis, T., dan Braun, T., 2014, Rest-based sensor networks with OData, 11th Annual Conference on Wireless On-demand Network Systems and Services (WONS) 2014,  Austria, April 2014, hal. 33-40.

Vasiliev, Y., 2007, SOA and WS-BPEL : Composing Service-Oriented Solutions with PHP and ActiveBPEL, Packt Publishing, United Kingdom.



Leave a Reply

Your email address will not be published. Required fields are marked *