Untuk memberikan pengalaman developer yang konsisten di banyak API dan selama jangka waktu yang lama, semua nama yang digunakan oleh API harus:
- sederhana
- intuitif
- konsisten
Hal ini mencakup nama antarmuka, resource, koleksi, metode, dan pesan.
Karena banyak developer bukan penutur asli bahasa Inggris, salah satu tujuankonvensi penamaan ini adalah untuk memastikan bahwa sebagian besar developer dapat memahami API dengan mudah. Hal ini dilakukan dengan mendorong penggunaan kosakata yang sederhana, konsisten, dan kecil saat memberi nama metode dan resource.
- Nama yang digunakan dalam API harus menggunakan bahasa Inggris Amerika yang benar. Misalnya, lisensi (bukan lisensi), warna (bukan warna).
- Bentuk singkat atau singkatan kata panjang yang umum diterima dapat digunakan untuk mempersingkat. Misalnya, API lebih disukai daripada Application Programming Interface.
- Gunakan terminologi yang intuitif dan sudah dikenal jika memungkinkan. Misalnya, saat menjelaskan penghapusan (dan pemusnahan) resource, penghapusan lebih disukai daripada penghapusan total.
- Gunakan nama atau istilah yang sama untuk konsep yang sama, termasuk untuk konsep yang dibagikan di seluruh API.
- Hindari kelebihan nama. Gunakan nama yang berbeda untuk konsep yang berbeda.
- Hindari nama yang terlalu umum dan ambigu dalam konteks API dan ekosistem Google API yang lebih besar. Hal ini dapat menyebabkan kesalahpahaman tentang konsep API. Sebagai gantinya, pilih nama spesifik yang menjelaskan konsep API secara akurat. Hal ini sangat penting untuk nama yang menentukan elemen API tingkat pertama, seperti resource. Tidak ada daftar nama yang pasti untuk dihindari, karena setiap nama harus dievaluasi dalam konteks nama lain. Instance, info, dan layanan adalah contoh nama yang pernah bermasalah di masa lalu. Nama yang dipilih harus menjelaskan konsep API dengan jelas (misalnya: instance dari apa?) dan membedakannya dari konsep relevan lainnya (misalnya: apakah "alert" berarti aturan, sinyal, atau notifikasi?).
- Pertimbangkan dengan cermat penggunaan nama yang mungkin bertentangan dengan kata kunci dalam bahasa pemrograman umum. Nama tersebut dapat digunakan, tetapi kemungkinan akan memicu pemeriksaan tambahan selama peninjauan API. Gunakan dengan wisely dan seperlunya.
Nama produk
Nama produk mengacu pada nama pemasaran produk API, seperti Google Calendar API. Nama produk harus digunakan secara konsisten oleh API, UI, dokumentasi, Persyaratan Layanan, laporan penagihan, kontrak komersial, dll. Google API harus menggunakan nama produk yang disetujui oleh tim produk dan pemasaran.
Tabel di bawah menunjukkan contoh semua nama API terkait dan konsistensinya. Lihat di bawah ini di halaman ini untuk mengetahui detail selengkapnya tentang nama masing-masing dan konvensinya.
Nama API | Contoh |
---|---|
Nama Produk | Google Calendar API |
Nama Layanan | calendar.googleapis.com |
Nama Paket | google.calendar.v3 |
Nama Antarmuka | google.calendar.v3.CalendarService |
Direktori Sumber | //google/calendar/v3 |
Nama API | calendar |
Nama layanan
Nama layanan harus berupa nama DNS yang valid secara sintaksis (sesuai dengan RFC
1035) yang dapat di-resolve ke satu
atau beberapa alamat jaringan. Nama layanan Google API publik mengikuti pola: xxx.googleapis.com
. Misalnya, nama layanan
Google Kalender adalah calendar.googleapis.com
.
Jika API terdiri dari beberapa layanan, layanan tersebut harus diberi nama
dengan cara yang membantu visibilitas. Salah satu cara untuk melakukannya adalah dengan Nama Layanan
berbagi awalan yang sama. Misalnya, layanan build.googleapis.com
dan
buildresults.googleapis.com
adalah layanan yang merupakan bagian dari Google
Build API.
Nama paket
Nama paket yang dideklarasikan dalam file .proto API harus konsisten dengan Nama Produk dan Nama Layanan. Nama paket harus menggunakan nama komponen tunggal untuk menghindari nama komponen tunggal dan jamak yang tercampur. Nama paket tidak boleh menggunakan garis bawah. Nama paket untuk API berversi harus diakhiri dengan versi. Contoh:
// Google Calendar API
package google.calendar.v3;
API abstrak yang tidak terkait langsung dengan layanan, seperti Google Watcher API, harus menggunakan nama paket proto yang konsisten dengan nama Produk:
// Google Watcher API
package google.watcher.v1;
Nama paket Java yang ditentukan dalam file .proto API harus cocok dengan
nama paket proto dengan awalan nama paket Java standar (com.
,
edu.
, net.
, dll.). Contoh:
package google.calendar.v3;
// Specifies Java package name, using the standard prefix "com."
option java_package = "com.google.calendar.v3";
ID koleksi
ID koleksi harus menggunakan
bentuk jamak dan lowerCamelCase
, serta ejaan dan
semantik bahasa Inggris Amerika. Misalnya: events
, children
, atau deletedEvents
.
Nama antarmuka
Untuk menghindari kebingungan dengan Nama Layanan seperti
pubsub.googleapis.com
, istilah nama antarmuka mengacu pada nama
yang digunakan saat menentukan service
dalam file .proto:
// Library is the interface name.
service Library {
rpc ListBooks(...) returns (...);
rpc ...
}
Anda dapat menganggap nama layanan sebagai referensi untuk implementasi sebenarnya dari serangkaian API, sedangkan nama antarmuka mengacu pada definisi abstrak API.
Nama antarmuka harus menggunakan kata benda intuitif seperti Kalender atau Blob. Nama tidak boleh bertentangan dengan konsep yang sudah mapan dalam bahasa pemrograman dan library runtime-nya (misalnya, File).
Dalam kasus yang jarang terjadi, jika nama antarmuka akan bertentangan dengan nama
lain dalam API, akhiran (misalnya Api
atau Service
)
harus digunakan untuk membedakan.
Nama metode
Dalam spesifikasi IDL-nya, layanan dapat menentukan satu atau beberapa metode RPC
yang sesuai dengan metode pada koleksi dan resource. Nama
metode harus mengikuti konvensi penamaan VerbNoun
dalam
camel case besar, dengan kata benda biasanya adalah jenis resource.
Kata kerja | Kata benda | Nama metode | Pesan permintaan | Pesan respons |
---|---|---|---|---|
List |
Book |
ListBooks |
ListBooksRequest |
ListBooksResponse |
Get |
Book |
GetBook |
GetBookRequest |
Book |
Create |
Book |
CreateBook |
CreateBookRequest |
Book |
Update |
Book |
UpdateBook |
UpdateBookRequest |
Book |
Rename |
Book |
RenameBook |
RenameBookRequest |
RenameBookResponse |
Delete |
Book |
DeleteBook |
DeleteBookRequest |
google.protobuf.Empty |
Bagian kata kerja dari nama metode harus menggunakan modus imperatif, yang digunakan untuk perintah atau perintah, bukan modus indikatif yang digunakan untuk pertanyaan.
Untuk metode standar, bagian kata benda dari nama metode harus tunggal
untuk semua metode kecuali List
, dan harus jamak untuk List
. Untuk metode
kustom, kata benda dapat berupa tunggal atau jamak sesuai kebutuhan. Metode batch
harus menggunakan kata benda jamak.
Hal ini mudah membingungkan saat kata kerja mengajukan pertanyaan tentang sub-resource
di API, yang sering kali dinyatakan dalam mood indikatif. Misalnya,
memerintahkan API untuk membuat buku jelas-jelas CreateBook
(dalam mood
imperatif), tetapi menanyakan API tentang status penerbit buku mungkin menggunakan
mood indikatif, seperti IsBookPublisherApproved
atau NeedsPublisherApproval
.
Agar tetap dalam mood imperatif dalam situasi seperti ini, gunakan perintah seperti "check" (CheckBookPublisherApproved
) dan "validate"
(ValidateBookPublisher
).
Nama metode tidak boleh menyertakan preposisi (misalnya, "For", "With", "At", "To"). Secara umum, nama metode dengan preposisi menunjukkan bahwa metode baru digunakan saat kolom harus ditambahkan ke metode yang ada, atau metode harus menggunakan kata kerja yang berbeda.
Misalnya, jika pesan CreateBook
sudah ada dan Anda mempertimbangkan
untuk menambahkan CreateBookFromDictation
, sebaiknya pertimbangkan metode
TranscribeBook
.
Nama pesan
Nama pesan harus singkat dan ringkas. Hindari kata-kata yang tidak perlu atau
berlebihan. Kata sifat sering kali dapat dihilangkan jika tidak ada pesan yang sesuai
tanpa kata sifat. Misalnya, Shared
di SharedProxySettings
tidak
diperlukan jika tidak ada setelan proxy yang tidak dibagikan.
Nama pesan tidak boleh menyertakan preposisi (misalnya, "Dengan", "Untuk"). Umumnya, nama pesan dengan preposisi lebih baik direpresentasikan dengan kolom opsional pada pesan.
Pesan permintaan dan respons
Pesan permintaan dan respons untuk metode RPC harus diberi nama
setelah nama metode dengan akhiran Request
dan Response
,
masing-masing, kecuali jika jenis permintaan atau respons metode adalah:
- pesan kosong (gunakan
google.protobuf.Empty
), - jenis resource, atau
- resource yang mewakili operasi
Hal ini biasanya berlaku untuk permintaan atau respons yang digunakan dalam metode standar
Get
, Create
, Update
, atau Delete
.
Nama enum
Jenis enum harus menggunakan nama UpperCamelCase.
Nilai enum harus menggunakan CAPITALIZED_NAMES_WITH_UNDERSCORES. Setiap nilai enum harus diakhiri dengan titik koma, bukan koma. Nilai pertama harus diberi nama ENUM_TYPE_UNSPECIFIED karena ditampilkan saat nilai enum tidak ditentukan secara eksplisit.
enum FooBar {
// The first value represents the default and must be == 0.
FOO_BAR_UNSPECIFIED = 0;
FIRST_VALUE = 1;
SECOND_VALUE = 2;
}
Wrapper
Pesan yang mengenkapsulasi jenis enum proto2 dengan nilai 0
yang memiliki makna selain
UNSPECIFIED
harus diberi nama dengan akhiran Value
dan memiliki satu
kolom bernama value
.
enum OldEnum {
VALID = 0;
OTHER_VALID = 1;
}
message OldEnumValue {
OldEnum value = 1;
}
Nama kolom
Definisi kolom dalam file .proto harus menggunakan nama_yang_dipisahkan_underscore_huruf_kecil. Nama ini akan dipetakan ke konvensi penamaan native dalam kode yang dihasilkan untuk setiap bahasa pemrograman.
Nama kolom tidak boleh menyertakan preposisi (misalnya, "for", "during", "at"), misalnya:
reason_for_error
haruserror_reason
cpu_usage_at_time_of_failure
harusfailure_time_cpu_usage
Nama kolom tidak boleh menggunakan kata sifat postpositif (pengubah yang ditempatkan setelah kata benda), misalnya:
items_collected
haruscollected_items
objects_imported
harusimported_objects
Nama kolom berulang
Kolom berulang di API harus menggunakan bentuk jamak yang tepat. Hal ini sesuai dengankonvensi Google API yang ada, dan ekspektasi umum dari developer eksternal.
Waktu dan Durasi
Untuk merepresentasikan titik waktu yang tidak bergantung pada zona waktu atau kalender apa pun,
google.protobuf.Timestamp
harus digunakan, dan nama kolom
harus diakhiri dengan time
, seperti start_time
dan end_time
.
Jika waktu mengacu pada aktivitas, nama kolom harus memiliki
bentuk verb_time
, seperti create_time
, update_time
. Hindari penggunaan
bentuk lampau untuk kata kerja, seperti created_time
atau
last_updated_time
.
Untuk merepresentasikan rentang waktu antara dua titik waktu yang tidak bergantung pada
kalender dan konsep apa pun seperti "hari" atau "bulan", google.protobuf.Duration
harus digunakan.
message FlightRecord {
google.protobuf.Timestamp takeoff_time = 1;
google.protobuf.Duration flight_duration = 2;
}
Jika Anda harus merepresentasikan kolom terkait waktu menggunakan jenis bilangan bulat karena alasan kompatibilitas atau lama, termasuk waktu jam dinding, durasi, keterlambatan, dan latensi, nama kolom harus memiliki bentuk berikut:
xxx_{time|duration|delay|latency}_{seconds|millis|micros|nanos}
message Email {
int64 send_time_millis = 1;
int64 receive_time_millis = 2;
}
Jika Anda harus menampilkan stempel waktu menggunakan jenis string karena alasan kompatibilitas atau lama, nama kolom tidak boleh menyertakan akhiran unit apa pun. Representasi string harus menggunakan format RFC 3339, misalnya "2014-07-30T10:43:17Z".
Tanggal dan Waktu
Untuk tanggal yang tidak bergantung pada zona waktu dan waktu, google.type.Date
harus digunakan dan harus memiliki akhiran _date
. Jika tanggal harus
direpresentasikan sebagai string, tanggal harus dalam format tanggal ISO 8601 YYYY-MM-DD,
misalnya 2014-07-30.
Untuk waktu yang tidak bergantung pada zona waktu dan tanggal,
google.type.TimeOfDay
harus digunakan dan harus memiliki akhiran _time
. Jika waktu harus
direpresentasikan sebagai string, waktu tersebut harus dalam format waktu 24 jam ISO 8601
HH:MM:SS[.FFF], misalnya 14:55:01.672.
message StoreOpening {
google.type.Date opening_date = 1;
google.type.TimeOfDay opening_time = 2;
}
Jumlah
Jumlah yang direpresentasikan oleh jenis bilangan bulat harus menyertakan satuan pengukuran.
xxx_{bytes|width_pixels|meters}
Jika kuantitas adalah jumlah item, kolom harus memiliki akhiran
_count
, misalnya node_count
.
Kolom filter daftar
Jika API mendukung pemfilteran resource yang ditampilkan oleh metode List
,
kolom yang berisi ekspresi filter harus diberi nama filter
.
Contoh:
message ListBooksRequest {
// The parent resource name.
string parent = 1;
// The filter expression.
string filter = 2;
}
Respons daftar
Nama kolom dalam pesan respons metode List
, yang
berisi daftar resource harus berupa bentuk jamak dari nama
resource itu sendiri. Misalnya, metode CalendarApi.ListEvents()
harus
menentukan pesan respons ListEventsResponse
dengan kolom berulang
yang disebut events
untuk daftar resource yang ditampilkan.
service CalendarApi {
rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) {
option (google.api.http) = {
get: "/v3/{parent=calendars/*}/events";
};
}
}
message ListEventsRequest {
string parent = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListEventsResponse {
repeated Event events = 1;
string next_page_token = 2;
}
Camel case
Kecuali untuk nama kolom dan nilai enum, semua definisi di dalam file .proto
harus menggunakan nama UpperCamelCase, seperti yang ditentukan oleh Gaya Java
Google.
Singkatan nama
Untuk singkatan nama yang dikenal luas di kalangan developer software, seperti config
dan spec
, singkatan harus digunakan dalam definisi API, bukan
ejaan lengkapnya. Hal ini akan membuat kode sumber mudah dibaca dan ditulis.
Dalam dokumentasi formal, ejaan lengkap harus digunakan. Contoh:
- config (konfigurasi)
- id (ID)
- spec (spesifikasi)
- stats (statistik)