In this mock test, the task was pretty straight forward. We have to create a fully functioned Backend System with RESTful API and ready to be consumed for frontend system. The project was deployed in https://mocktest-be.herokuapp.com
The following lists show my development stack:
Express + Postgres + Heroku
=> Found a way to connect backend aplication that is able to be deployed with a database add on (Heroku PostgreSQL) in deployment platform itself. Feels like creating my own Firestore, but this time I'm using relational one (PostgreSQL).Endpoint with CORS
=> CORS has been an issue for Developer including me as an addict in frontend. Now, I know the reason why backend add this policy in backend and how to mitigate the issue from backend side.Can't wrong Swagger
=> Sorry, I don't add API docs here in README file, I've created a fully functioned page to test all of the endpoints including the authorization. Please check https://mocktest-be.herokuapp.com/docs.
- CRUD Functionality of Products.
- User Authentication with token
- Deployed in Heroku and ready to be consumed globally
- CORS policy for PUT and DELETE methods
- Swagger Page to test all endpoints.
If you want to edit the code, you need to have nodejs
and NPM
.
Install all dependencies by this command if you already get node and npm installed in your system.
cd <repository-folder>
npm install
The application has been deployed in https://mocktest-be.herokuapp.com. And the Documentation also available in https://mocktest-be.herokuapp.com/docs
If you want to change the code / improve my code please use this steps:
-
Set your terminal directory to
repository folder
-
Start the Node Server by running this command
npm run dev
-
Set and
.env
file with this variableSECRET_JWT=<SOME-SECRET_STRING>
-
Open
localhost:3000
in your browser/postman
Column | Type | Constraint | Value |
---|---|---|---|
id | INTEGER | PK | Auto Generated |
name | STRING | NOTNULL | input |
STRING | NOTNULL | input | |
passwordDigest | STRING | NOTNULL | input |
createdAt | DATE | NOTNULL | Auto Generated |
updatedAt | DATE | NOTNULL | Auto Generated |
Column | Type | Constraint | Value |
---|---|---|---|
id | INTEGER | PK | Auto generated |
name | STRING | NOTNULL | input |
price | INTEGER | NOTNULL | input |
imageUrl | STRING | NOTNULL | input |
createdAt | DATE | NOTNULL | Auto Generated |
updatedAt | DATE | NOTNULL | Auto Generated |
- More security for rather than just Authorization header
Distributed under the MIT License.
Twitter - @cok_yoga LinkedIn - Sedana Yoga
1. Disebutkan seorang client membutuhkan layanan aplikasi antar makanan. Dan Anda diminta untuk membuat desain sistem dengan kriteria pelanggan hanya dilayani dengan mobile apps.
Desainlah stack backend dan micro service layanan tersebut beserta tools dan alasan mengapa memilih design dan tools tersebut. Answer: Banyak perusahaan saat ini sudah mengembangkan arsitektur microservices pada aplikasi. Kemudahan dan efisiensi yang didapat sangat berbeda dengan pengembangan aplikasi dengan arsitektur monolitik ini karena aplikasi terbagi menjadi beberapa services (feature/service level) yang di setiap servicenya punya system desainnya masing-masing, contohnya: tech stack untuk service authentication mungkin berbeda dengan stack service payment, maka dari itu jika ada masalah di satu service, service yang lain tidak ada sangkut pautnya jadi issue terisolasi dengan baik. Desain microservice diperlukan untuk beberapa alasan, seperti:
- Meningkatkan kecepatan dan skalabilitas
- Meningkatkan produktivitas dan agility
- Deployment lebih aman dan lancar
- Maintenance yang mudah
- Tidak terbatas pada satu tech stack di setiap servicenya
- Mampu mengisolasi kesalahan
- Mengurangi ketergantungan dengan layanan eksternal
Tech Stack:
- Frontend:
- Flutter (menggunakan native language dengan asumsi akan lebih cepat, meningkatkan UX)
- Backend:
- NodeJS (ExpressJS menggunakan language umum untuk digunakan di segala platform dan RESTful API yang mudah untuk dipahami)
- PostgreSQL (NoSQL lebih baik dari segi konsistensi sehingga data tidak berantakan)
- Tools - Docker (Containerize) - AWS (lebih cepat dan fleksibel) - GitHub (Repository untuk semua services) - Jenkins (Integrasi semua services)
Jelaskan solusi tersebut beserta alasannya. Answer
- Encrypt the Data Enkripsi data yang sensitif salah satu cara menjamin keamaan dari external
- Pastikan Library yang dipakai aman Jika kita menggunakan library eksternal, code kita akan bergabung dengan code yang ada dalam library. Ada kemungkinan library mengimplementasi code yang tidak aman.
- Berikan Authorization pada API Endpoint Authorization modern seperti OAuth atau JWT
- High-level Authentication Multi Factor Authentication / Biometrics authentication dapat digunakan agar pengiriman data tidak dilakukan pihak external
4. Dari dokumen https://testbinar.docs.apiary.io/, menurut anda, apakah ada desian API yang kurang maupun keliru? Jika ada, tuliskan kekurangan-kekurangan desain tersebut dan bagaimana seharusnya dokumentasi itu ditulis.
Issues:
- Endpoint POST /auth/# menerima tipe content application/x-www-form-urlencoded yang mana tidak sesuai dengan request body yang mengunakan JSON
- Id dan Password pada User dan Product seharusnya tidak ditampilkan karena termasuk data sensitif
- Testing API V2 tidak begitu banyak bisa digunakan karena hanya menampilkan message: Hello World