Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Node.js
Code

Desain RESTful API Dengan NodeJS & Restify

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Muhammad Gufron (you can also view the original English article)

Final product image
What You'll Be Creating

RESTful API terdiri dari dua konsep utama: Resource, dan Representation. Resource dapat menjadi objek apapun terkait dengan data, atau diidentifikasikan dengan URI (lebih dari satu URI dapat merujuk ke sumber daya yang sama), dan dapat dioperasikan dengan menggunakan metode HTTP. Representasi adalah cara anda menampilkan sumber daya. dalam tutorial ini kita akan menutupi beberapa informasi teoritis tentang RESTful API desain, dan menerapkan contoh aplikasi blogging API dengan menggunakan NodeJS.

Resource

Memilih resource yang benar untuk RESTful API adalah bagian penting dari merancang. Pertama-tama Anda perlu untuk menganalisis domain bisnis Anda dan kemudian memutuskan berapa banyak dan apa jenis resource akan digunakan yang relevan bagi kebutuhan bisnis Anda. Jika Anda merancang sebuah blogging API, anda mungkin akan menggunakan Article, User, dan Comment. Mereka adalah nama-nama resource, dan data yang terkait dengan itu adalah sumber daya itu sendiri:

Resource Verbs

Anda dapat melanjutkan dengan operasi resource setelah Anda telah memutuskan pada resource yang diperlukan. Operasi di sini merujuk kepada metode HTTP. Misalnya, untuk membuat sebuah artikel, Anda dapat membuat request berikut:

Dengan cara yang sama, Anda dapat melihat artikel yang ada dengan mengeluarkan request berikut:

Bagaimana memperbarui artikel yang ada? Aku bisa mendengar bahwa Anda mengatakan:

Aku bisa membuat permintaan posting lain untuk /articles/update/123456789012 dengan payload.

Mungkin lebih baik, tapi URI menjadi lebih kompleks. Seperti yang kita katakan sebelumnya, operasi dapat merujuk ke metode HTTP. Ini berarti, state operasi update dalam metode HTTP daripada meletakkan bahwa dalam URI. Sebagai contoh: 

Ngomong-ngomong, dalam contoh ini, Anda melihat tag dan kategori fields. Mereka tidak perlu harus diisi. Anda dapat meninggalkan mereka kosong dan mengatur mereka di masa depan.

Kadang-kadang, Anda perlu untuk menghapus artikel kalau sudah ketinggalan jaman. Dalam hal ini Anda dapat menggunakan request HTTP DELETE untuk /articles/123456789012.

Metode HTTP adalah konsep yang standar. Jika Anda menggunakan mereka sebagai suatu operasi, Anda akan memiliki URI sederhana, dan API sederhana semacam ini akan membantu Anda mendapatkan bahagia konsumen.

Bagaimana jika Anda ingin untuk memasukkan komentar untuk artikel? Anda dapat memilih artikel dan menambahkan komentar baru untuk artikel dipilih. Dengan menggunakan pernyataan ini, Anda dapat menggunakan request berikut:

Resource form diatas disebut sebagai sub-resource. Comment adalah sub-resource Article. Comment payload di atas akan dimasukkan dalam database child dari Article. Kadang-kadang, URI yang berbeda mengacu pada resource yang sama. Misalnya, untuk melihat komentar tertentu, anda dapat menggunakan salah satu:

atau:

Versioning

Secara umum, fitur API sering berubah untuk menyediakan fitur-fitur baru bagi konsumen. Dalam hal ini, dua versi api sama bisa eksis pada waktu yang sama. Dalam rangka untuk memisahkan dua fitur tersebut, Anda dapat menggunakan versioning. Ada dua bentuk versioning

  1. Versi di URI: Anda dapat memberikan nomor versi dalam URI. Misalnya, /v1.1/articles/123456789012.
  2. Versi di Header: memberikan nomor versi di header, dan tidak pernah mengubah URI. Sebagai contoh:

Sebenarnya, versi perubahan hanya perwakilan sumber daya, bukan konsep sumber daya. Jadi, Anda tidak perlu mengubah struktur URI. Di v1.1, mungkin sebuah field baru telah ditambahkan ke artikel. Namun, itu masih kembali sebuah artikel. Dalam opsi kedua, URI masih sederhana dan konsumen tidak perlu mengubah URI mereka dalam implementasi sisi klien.

Hal ini penting untuk merancang strategi untuk situasi di mana konsumen tidak menyediakan nomor versi. Anda dapat meningkatkan kesalahan ketika versi tidak disediakan, atau Anda dapat kembali respon dengan menggunakan versi pertama. Jika Anda menggunakan versi stabil terbaru sebagai default, konsumen bisa mendapatkan banyak kesalahan untuk implementasi sisi klien mereka.

Representasi

Representasi adalah cara bahwa API menampilkan resource. Ketika Anda memanggil endpoint API, Anda akan mendapatkan kembali resource. Resource ini dapat berupa format seperti XML, JSON, dll. JSON lebih baik jika Anda merancang sebuah API baru. Namun, jika Anda memperbarui API yang sudah ada yang digunakan untuk mengembalikan respon XML, Anda dapat memberikan versi lain untuk respons JSON.

Ini adalah informasi yang cukup teoritis tentang tenang desain RESTfull API. Mari kita melihat penggunaannya dalam kehidupan nyata dengan merancang dan menerapkan API Blogging yang menggunakan Restify.

Blogging REST API

Desain

Untuk mendesain RESTful API, kita perlu menganalisis bisnis domain. Kemudian kita dapat mendefinisikan resource kami. Di blogging API, kita memerlukan:

  • Create, Update, Delete, View Article
  • Membuat komentar untuk Article, Update, Delete, View, Comment
  • Create, Update, Delete, View User

Dalam API ini, saya tidak akan mencakup bagaimana untuk mengotentikasi user untuk membuat sebuah artikel atau komentar. Untuk bagian otentikasi, Anda dapat merujuk ke otentikasi berbasis Token dengan tutorial AngularJS & NodeJS.

Nama resource kami siap. Operasi resource adalah simple CRUD. Anda dapat merujuk ke tabel berikut untuk menampilkan API umum.

Nama Resource HTTP Verbs HTTP Methods
Artikel membuat artikel
update artikel
menghapus artikel
Lihat artikel
POST /articles dengan Payload
PUT /articles/123 dengan payload
DELETE /articles/123
GET /article/123
Komentar membuat Komentar
update Komentar
delete Komentar
view Komentar
POST /articles/123/comments dengan Payload
PUT /comments/123 dengan Payload
DELETE /comments/123
GET /comments/123
User membuat User
update User
delete User
view User
POST /users dengan Payload
PUT /users/123 dengan Payload
DELETE /users/123
GET /users/123

Setup Project

Dalam proyek ini, kami akan menggunakan NodeJS dengan Restify. Resource akan disimpan dalam MongoDB database. Pertama-tama, kita dapat mendefinisikan resource sebagai model Restify.

Artikel

Komentar

User

Tidak akan ada operasi resource User. Kita akan mengasumsikan bahwa kita sudah tahu pengguna saat ini yang akan mampu beroperasi pada artikel atau komentar.

Anda mungkin bertanya mana modul mongoose ini berasal dari. Ini adalah kerangka ORM paling populer untuk MongoDB ditulis sebagai modul NodeJS. Modul ini dimasukkan dalam proyek dalam file config yang lain.

Sekarang kita dapat mendefinisikan kata HTTP kami untuk resource di atas. Anda dapat melihat berikut:

Dalam hal ini kode potongan, pertama-tama controller file yang berisi method controller mengulangi dan semua kontroler diinisialisasi untuk mengeksekusi permintaan khusus ke URI. Setelah itu, URI untuk operasi tertentu yang ditetapkan untuk dasar operasi CRUD. Ada juga versi untuk salah satu operasi di artikel.

Misalnya, jika Anda menyatakan versi 2 di header terima-versi, viewArticle_v2 akan dieksekusi. viewArticle dan viewArticle_v2 keduanya melakukan pekerjaan yang sama, menampilkan sumber daya, tapi mereka menunjukkan sumber daya artikel dalam format yang berbeda, seperti yang Anda lihat di bidang title di bawah ini. Akhirnya, server dimulai pada port tertentu, dan beberapa kesalahan pelaporan cek diterapkan. Kita bisa melanjutkan method controller untuk HTTP operasi pada resource.

article.js

Anda dapat menemukan penjelasan tentang operasi CRUD dasar di sisi Mongoose di bawah ini:

  • createArticle: ini adalah operasi simple save pada articleModel yang dikirim dari request body. Model baru dapat dibuat dengan mengirimkan request body sebagai konstruktor untuk model seperti var nearticleModel = new Article(req.body).
  • viewArticle: untuk melihat artikel detail, ID Artikel diperlukan dalam URL parameter. findOne dengan parameter ID sudah cukup untuk kembali artikel detail.
  • updateArticle: Artikel update adalah simple find query dan beberapa manipulasi data pada artikel kembali. Akhirnya, model diperbarui kebutuhan akan disimpan ke database dengan mengeluarkan perintah save.
  • deleteArticle: findByIdAndRemove adalah cara terbaik untuk menghapus artikel dengan menyediakan artikel ID.

Perintah Mongoose yang disebutkan di atas cukup statis metode melalui artikel objek yang juga referensi Mongoose schema.

comment.js

Ketika Anda membuat request ke salah satu sumber URI, fungsi yang terkait dengan dinyatakan dalam controller akan dieksekusi. Setiap fungsi di dalam file controller dapat menggunakan objek req dan res. Sumber komentar di sini adalah sub-resource Artikel. Semua operasi query yang dibuat melalui model artikel untuk menemukan sub-dokumen dan melakukan pembaruan diperlukan. Namun, setiap kali Anda mencoba untuk melihat sumber komentar, Anda akan melihat satu bahkan jika tidak ada koleksi di MongoDB.

Saran Desain Lain

  • Pilih easy-to-understand resources di order untuk memberikan kemudahan penggunaan kepada konsumen.
  • Biarkan logika bisnis yang dilaksanakan oleh konsumen. Sebagai contoh, sumber artikel memiliki sebuah field yang bernama slug. Konsumen tidak perlu untuk mengirim detail ini ke REST API. Strategi slug ini harus dikelola di sisi REST API untuk mengurangi coupling antara API dan konsumen. Konsumen hanya perlu mengirim detail judul, dan Anda dapat menghasilkan slug sesuai kebutuhan bisnis Anda di sisi REST API.
  • Menerapkan lapisan otorisasi untuk endpoint API Anda. Konsumen tidak sah dapat mengakses data yang terbatas yang dimiliki oleh pengguna lain. Dalam tutorial ini, kita tidak mencakup User resource, tetapi Anda dapat merujuk ke Token Based Authentication with AngularJS & NodeJS untuk informasi lebih lanjut tentang Pengesahan API.
  • User URI bukan query string. /artikel/123 (baik), /articles?id=123 (buruk).
  • Tidak memelihara state; selalu gunakan input/output instan.
  • Gunakan kata benda untuk resource Anda. Anda dapat menggunakan metode HTTP untuk beroperasi pada resource.

Akhirnya, jika Anda merancang sebuah API yang tenang dengan mengikuti aturan-aturan dasar ini, Anda akan selalu memiliki sebuah sistem yang fleksibel, maintainable, mudah dimengerti.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.