summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <m.shulhan@gmail.com>2020-12-09 04:30:19 +0700
committerShulhan <m.shulhan@gmail.com>2020-12-09 04:30:19 +0700
commit18f12c3602395a8c3756118bbebf8b29e7d6c18c (patch)
tree147dfe0dee79b3b7df9041d09e245df8776eb1c7
parent8cbf10133362ee7e41739de75024172de1ca30bf (diff)
downloadgolang-id-web-18f12c3602395a8c3756118bbebf8b29e7d6c18c.tar.xz
blog: terjemahkan artikel "JSON-RCP: a tale of interface"
Artikel aslinya yaitu https://golang.org/blog/json-rpc-tale-of-interfaces .
-rw-r--r--_content/blog/index.adoc3
-rw-r--r--_content/blog/json-rpc/index.adoc71
2 files changed, 74 insertions, 0 deletions
diff --git a/_content/blog/index.adoc b/_content/blog/index.adoc
index 304ef69..b155b6f 100644
--- a/_content/blog/index.adoc
+++ b/_content/blog/index.adoc
@@ -60,6 +60,9 @@
* link:/blog/introducing-go-playground/[Memperkenalkan Go Playground],
15 September 2010. _Andrew Gerrand_
+* link:/blog/json-rpc/[JSON-RPC: kisah penggunaan interface],
+ 27 April 2010. _Andrew Gerrand_
+
* link:/blog/third-party-libraries-goprotobuf-and[Pustaka pihak-ketiga:
goprotobuf dan lainnya],
20 April 2010. _Andrew Gerrand_
diff --git a/_content/blog/json-rpc/index.adoc b/_content/blog/json-rpc/index.adoc
new file mode 100644
index 0000000..fbbc003
--- /dev/null
+++ b/_content/blog/json-rpc/index.adoc
@@ -0,0 +1,71 @@
+= JSON-RPC: kisah penggunaan interface
+Andrew Gerrand
+27 April 2010
+
+Di artikel ini kita memperlihatkan contoh di mana
+link:/doc/effective_go.html#interfaces_and_types[interface]
+pada Go mempermudah melakukan perubahan (_refactor_) pada kode yang telah ada
+untuk membuatnya lebih fleksibel dan ekstensibel.
+Awalnya, pustaka standar
+https://golang.org/pkg/net/rpc/[paket RPC]
+menggunakan format kostum bernama
+https://golang.org/pkg/encoding/gob/[gob].
+Untuk beberapa aplikasi, kita ingin menggunakan
+https://golang.org/pkg/encoding/json/[JSON]
+sebagai format alternatif.
+
+Pertama kita mendefinisikan pasangan interface untuk menjelaskan
+fungsionalitas dari format yang sudah ada, satu untuk sisi klien, satu lagi di
+sisi peladen (_server_).
+
+----
+type ServerCodec interface {
+ ReadRequestHeader(*Request) error
+ ReadRequestBody(interface{}) error
+ WriteResponse(*Response, interface{}) error
+ Close() error
+}
+----
+
+Di sisi peladen, kita mengubah dua fungsi internal untuk menerima interface
+`ServerCodec`, mengganti `gob.Encoder`.
+Berikut salah satu dari fungsi tersebut,
+
+----
+func sendResponse(sending *sync.Mutex, req *Request,
+ reply interface{}, enc *gob.Encoder, errmsg string)
+----
+
+menjadi
+
+----
+func sendResponse(sending *sync.Mutex, req *Request,
+ reply interface{}, enc ServerCodec, errmsg string)
+----
+
+Kita kemudian menulis pembungkus untuk `gobServerCodec` untuk mereproduksi
+fungsionalitas yang asli.
+Setelah itu menjadi mudah untuk membuat `jsonServerCodec`.
+
+Setelah melakukan perubahan yang sama di sisi klien, semua pekerjaan yang
+harus dilakukan telah selesai untuk paket RPC.
+Semua ini membutuhkan tidak lebih dari 20 menit!
+Setelah dirapikan sedikit dan melakukan pengujian pada kode yang baru,
+https://github.com/golang/go/commit/dcff89057bc0e0d7cb14cf414f2df6f5fb1a41ec[perubahan
+terakhir]
+dikirim.
+
+Pada bahasa beroritentasi objek-turunan seperti Java atau C++, langkah yang
+dilakukan untuk menyelesaikan masalah yang sama seperti di atas yaitu dengan
+menggeneralisasi class RPC, dan membuat sub-class untuk JsonRPC dan GobRPC.
+Namun, pendekatan dengan cara ini menjadi sedikit sulit jika kita ingin
+supaya perubahan tersebut ortogonal terhadap hirarki class.
+(Misalnya, jika kita memiliki implementasi standar RPC tersendiri).
+Dalam paket Go, kita mengambil langkah yang tidak hanya simpel secara
+konseptual namun juga memiliki perubahan kode yang sedikit dan jelas.
+
+Kualitas vital dari setiap basis kode adalah pemeliharaan.
+Saat kebutuhan berubah, sangatlah penting supaya kode beradaptasi dengan mudah
+dan bersih, dan tidak menjadi liar dan susah untuk dikerjakan.
+Kami percaya bahwa sistem tipe berorientasi komposisi yang ringan pada Go
+membuat penstrukturan kode yang mudah dikembangkan.