Basic Stat Api

←index Jul 19, 2023

Basic Stat Api adalah HTTP API yang menyediakan kalkulasi statistika dasar. Proyek ini terinspirasi dari demo API untuk gem ‘trend-ruby’ yang ditulis oleh Andrew Kane. Proyek ini adalah media belajar dalam membuat HTTP API, TDD, dan pemrograman dengan bahasa ruby.

Pada proyek ini, sinatra digunakan karena saya ingin mencoba untuk mengetahui beberapa low level component yang ada pada HTTP API (yang mana semuanya disediakan secara default oleh rails magic) dan mencoba untuk meminimalisir dependencies yang dibutuhkan. Selain itu beberapa library dan tools yang digunakan antara lain:

Initiate

Proyek ini dimulai dari development dan testing pada bagian pada public endpoint dan custom middleware. saya tidak melakukan stub dan mock karena sejauh ini baik itu fitur maupun test case belum terhitung banyak sehingga waktu eksekusi test masih terbilang cepat (kecuali untuk pengujian rate limiting yang mana membutuhkan fungsi sleep untuk mensimulasi rate limit yang kadaluarsa dan tidak bisa diakali dengan Timecop karena perhitungan berlangsung di redis). Hal ini tentu perlu menjadi catatan kedepannya jika fitur dan test case terus bertambah, mungkin dengan melakukan uji edge case menggunakan unit test ketimbang acceptance test/test yang berpotensi membutuhkan waktu yang lama.

example_id                                      | status | run_time        |
----------------------------------------------- | ------ | --------------- |
./spec/features/mean_spec.rb[1:1]               | passed | 0.00308 seconds |
./spec/features/mean_spec.rb[1:2]               | passed | 0.00431 seconds |
./spec/features/median_spec.rb[1:1]             | passed | 0.00328 seconds |
./spec/features/median_spec.rb[1:2]             | passed | 0.04989 seconds |
./spec/features/mode_spec.rb[1:1]               | passed | 0.00376 seconds |
./spec/features/mode_spec.rb[1:2]               | passed | 0.00467 seconds |
./spec/features/rate_limiting_spec.rb[1:1]      | passed | 0.01857 seconds |
./spec/features/rate_limiting_spec.rb[1:2]      | passed | 0.03867 seconds |
./spec/features/rate_limiting_spec.rb[1:3]      | passed | 11.04 seconds   |
./spec/features/standard_deviation_spec.rb[1:1] | passed | 0.00556 seconds |
./spec/features/standard_deviation_spec.rb[1:2] | passed | 0.00826 seconds |

Adding landing page

Untuk menampung demo (dan mungkin dokumentasi tiap endpoint) maka dibangunlah fitur landing page. Tidak seperti pengujian pada public endpoint, Capybara digunakan untuk melakukan pengujian tampilan (atau biasa disebut sebagai acceptance test).

example_id                                      | status | run_time        |
----------------------------------------------- | ------ | --------------- |
./spec/features/landing_page_spec.rb[1:1]       | passed | 0.00949 seconds |
./spec/features/landing_page_spec.rb[1:2]       | passed | 1.25 seconds    |

Kenaikan waktu eksekusi pada landing_page_spec:2 terjadi karena Capybara membutuhkan driver javascript (pada project ini digunakan Cuprite) yang tidak secepat ketika Capybara menggunakan driver rack-test yang secara langsung berkomunikasi dengan rack interfaces sehingga tidak perlu memulai server.

Creative Commons License