Standar konvensi untuk Backend Engineering di sebuah perusahaan melibatkan penyusunan pedoman yang mencakup berbagai aspek seperti penulisan kode, arsitektur sistem, pengelolaan versi, dokumentasi, dan praktik keamanan. Berikut adalah contoh standar konvensi yang bisa diterapkan di perusahaan:
- Penamaan didasari pada konvensi dan standar dari masing-masing bahasa.
- PHP: https://www.php-fig.org/
- Golang: https://go.dev/doc/effective_go
- Python: https://peps.python.org/pep-0000/
- Javascript: https://google.github.io/styleguide/jsguide.html
Apabila terdapat standar yang tidak tercantum pada konvensi dan standar masing-masing bahasa, maka berikut standar yang disepakati:
- Gunakan
camelCase
untuk variabel dan nama fungsi.
userName = "JohnDoe"
totalPrice = calculateTotal(cartItems)
- Gunakan
UPPER_CASE
dengan underscore untuk pemisah.
MAX_CONNECTIONS = 100;
TIMEOUT_DURATION = 30;
- Gunakan
PascalCase
.
class UserManager:
def __init__(self, user_name):
self.user_name = user_name
Catatan:
- Standar ini tidak mengesampingkan standar yang sudah disepakati di masing-masing bahasa, jika ada.
- Gunakan komentar untuk menjelaskan logika yang kompleks atau tidak jelas.
- Komentar harus dalam bahasa Inggris.
- Gunakan komentar TODO untuk menandai pekerjaan yang masih perlu diselesaikan.
# Function to calculate total price of items in the cart
def calculateTotal(cartItems):
total = 0
for item in cartItems:
# Add each item's price to total
total += item.price
return total
# TODO: Optimize this function for large datasets
- Gunakan indentasi 4 spasi.
- Hindari baris kode yang terlalu panjang, maksimal 80 karakter.
- Gunakan linter dan formatter untuk memastikan konsistensi,
- Javascript:ESLint
- Python: PyLint
- PHP: Laravel Pint
- Golang: GolangCI-Lint
def get_user_details(user_id):
user = database.find_user_by_id(user_id)
if user is not None:
return {
"id": user.id,
"name": user.name,
"email": user.email
}
else:
return None
- Gunakan standar RESTful atau GraphQL sesuai kebutuhan.
- RESTful: https://restfulapi.net/
- GraphSQL: https://graphql.org/learn/best-practices/
- Endpoint harus konsisten dan mudah dimengerti, gunakan kata kerja HTTP yang sesuai (GET, POST, PUT, DELETE).
GET /api/users/123
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}
- Berikan respons yang jelas dan informatif, termasuk kode status HTTP yang tepat.
200 OK
404 Not Found
- Pisahkan logika bisnis, logika presentasi, dan akses data ke dalam layer yang berbeda.
- Gunakan pola desain yang sesuai (contoh: MVC, MVP, MVVM) untuk memisahkan concerns.
- Gunakan branching model seperti GitFlow atau trunk-based development.
- Nama branch harus deskriptif, gunakan format feature/, bugfix/, release/, hotfix/.
- Gunakan format yang konsisten, contohnya:
[Type] Short description
[Body]
[Footer]
- Type bisa berupa feat (feature), fix (bug fix), docs (documentation), style (formatting, missing semi colons, etc), refactor, test, chore (maintain).
- Semua kode harus memiliki dokumentasi yang memadai, baik inline maupun di atas fungsi/kode yang relevan.
- Gunakan tool seperti JSDoc untuk JavaScript, Sphinx untuk Python.
- Gunakan tool seperti Swagger/OpenAPI untuk mendokumentasikan API.
- Dokumen API harus mencakup semua endpoint, parameter, respons, dan contoh penggunaan.
- Jangan pernah menyimpan data sensitif dalam kode sumber.
- Gunakan variabel lingkungan (environment variables) untuk informasi sensitif seperti kunci API, password, dsb.
- Validasi semua input dari pengguna untuk mencegah serangan injeksi.
- Gunakan library yang aman untuk menangani input dan output.
- Selalu gunakan versi terbaru dari dependencies.
- Aktifkan logging dan monitoring untuk mendeteksi dan merespons ancaman secara cepat.
- Setiap fungsi/kode harus memiliki unit test yang memadai.
- Gunakan framework pengujian yang sesuai (contoh: Jest untuk JavaScript, PyTest untuk Python).
- Lakukan pengujian integrasi untuk memastikan komponen bekerja bersama dengan baik.
- Mocking dan stubbing harus digunakan untuk mengisolasi bagian yang diuji.
- Gunakan CI/CD pipeline untuk memastikan setiap perubahan diuji sebelum digabungkan ke branch utama.
- Integrasikan dengan tools seperti Jenkins, CircleCI, atau GitHub Actions.
- Gunakan alat otomatisasi deployment seperti Ansible, Docker, Kubernetes.
- Pastikan bahwa proses deployment terotomatisasi dan dapat direproduksi.
- Siapkan mekanisme rollback untuk mengatasi kegagalan deployment.
- Simpan snapshot dari versi sebelumnya untuk memudahkan rollback.
Standar konvensi ini harus ditinjau secara berkala. Buat forum atau sesi khusus untuk mendiskusikan dan memperbarui standar sesuai kebutuhan. Dengan menerapkan standar konvensi ini, perusahaan dapat memastikan bahwa pengembangan backend berjalan dengan efisien, konsisten, dan aman.