2.1 ภาพรวมทั่วไป
2.1.1 ที่อยู่สำหรับเข้าถึง
| สภาพแวดล้อมทดสอบ | |
|---|---|
| สภาพแวดล้อมจริง | https://api.racent.com/ |
2.1.2 การยืนยันตัวตนด้วยลายเซ็นของอินเทอร์เฟซ
อินเทอร์เฟซใช้กลไกการยืนยันตัวตนด้วยลายเซ็น API เพื่อรับรองความครบถ้วนและความปลอดภัยของคำขอ ทุกครั้งที่เรียกใช้อินเทอร์เฟซ จะต้องแนบพารามิเตอร์ลายเซ็นมาด้วย และฝั่งเซิร์ฟเวอร์จะตรวจสอบความถูกต้องของลายเซ็น
พารามิเตอร์สาธารณะ
พารามิเตอร์ต่อไปนี้ ต้อง รวมอยู่ใน Query String ของคำขออินเทอร์เฟซทุกครั้ง:
| ชื่อพารามิเตอร์ | ประเภทพารามิเตอร์ | คำอธิบาย | ค่าตัวอย่าง |
|---|---|---|---|
| access_key | String | รหัสบัญชี ใช้ระบุตัวตนของผู้เรียกใช้ | 1000000059 |
| signature_nonce | String | ตัวเลขสุ่มเฉพาะสำหรับลายเซ็น ใช้ป้องกันการโจมตีแบบเล่นซ้ำ แต่ละคำขอต้องใช้ค่าสุ่มที่แตกต่างกัน | 2206561-6450-430e-8b0a-26980754c0de |
| timestamp | String | เวลาที่ส่งคำขอ (หน่วย: วินาที) | 1673418729 |
| signature_version | String | เวอร์ชันอัลกอริทึมลายเซ็น กำหนดเป็น 1.0 | 1.0 |
| signature_method | String | อัลกอริทึมลายเซ็น กำหนดเป็น md5 | md5 |
| signature | String | ค่าลายเซ็นของคำขอนี้ คำนวณจากพารามิเตอร์อื่นและคีย์ลับ | 85ef54421c69edeb098c7b557c6c5cd5 |
access_keyและAccessSecret(คีย์ลับ) สามารถขอรับได้หลังจากเข้าสู่ระบบ จาก การจัดการอินเทอร์เฟซ - ข้อมูลรับรองการเข้าถึง API
signature_nonceขอแนะนำให้ใช้ UUID หรือสตริงสุ่มที่เพียงพอ เพื่อรับประกันว่าคำขอแต่ละครั้งไม่ซ้ำกันtimestampคำขอที่มีเวลาต่างจากเวลาเซิร์ฟเวอร์เกินช่วงที่กำหนด (เช่น 5 นาที) จะถูกปฏิเสธ :::
กลไกการลงนาม
ขั้นตอนที่ 1: สร้างสตริงคำขอแบบมาตรฐาน
1.การจัดเรียงพารามิเตอร์
จัดเรียงพารามิเตอร์สาธารณะทั้งหมด (ยกเว้น signature) และพารามิเตอร์ที่อินเทอร์เฟซกำหนดเองตามลำดับพจนานุกรมจากน้อยไปมากของชื่อพารามิเตอร์
2.การเข้ารหัสพารามิเตอร์
ใช้การเข้ารหัส UTF-8 กับชื่อและค่าของแต่ละพารามิเตอร์ และทำ URL encoding ตามกฎ RFC3986:
- อักขระที่ไม่ต้องเข้ารหัส:
A-Z a-z 0-9 - _ . ~ - อักขระอื่นๆ (เช่น
ช่องว่าง,/,?,=เป็นต้น) ต้องเข้ารหัสเป็นรูปแบบ %XX เช่น ช่องว่างเข้ารหัสเป็น%20
3.การต่อพารามิเตอร์
- ใช้ = เชื่อมชื่อพารามิเตอร์และค่าพารามิเตอร์ที่เข้ารหัสแล้ว
- ใช้ & เชื่อมคู่พารามิเตอร์ทั้งหมด โดยคงลำดับพจนานุกรม
สตริงสุดท้ายที่ได้เรียกว่า stringToSign
ขั้นตอนที่ 2: สร้างสตริงลายเซ็นและคำนวณลายเซ็น
วิธีการคำนวณลายเซ็นแตกต่างกันตามประเภทคำขอดังนี้:
signature = md5(AccessSecret + md5( HTTPMethod + stringToSign ))
signature = md5(AccessSecret + md5( HTTPMethod + stringToSign ) + md5( jsonStringToBody ))
- HTTPMethod ต้องเป็นตัวพิมพ์ใหญ่ เช่น GET, POST
- jsonStringToBody คือสตริง JSON ดิบของ Body คำขอ (ต้องลบช่องว่างและขึ้นบรรทัดใหม่ และฟิลด์ต้องเรียงลำดับ)
- เครื่องหมาย + ในสูตรหมายถึงการต่อสตริง ไม่ได้ใช้ในการคำนวณ
กฎการเข้ารหัสพารามิเตอร์ (RFC3986)
| ประเภทอักขระ | วิธีจัดการ | ตัวอย่าง |
|---|---|---|
A-Z, a-z, 0-9, -, _, ., ~ | ไม่เข้ารหัส | abc123 → abc123 |
| ช่องว่าง | เข้ารหัสเป็น %20 | a b → a%20b |
อักขระ ASCII อื่น ๆ | เข้ารหัสเป็น %XX (เลขฐานสิบหก) | " → %22 |
ตัวอย่างคำขอ GET
สมมติว่า:
- access_key = "1000000059"
- AccessSecret = "19938c89c13ddf5da7636333a5aa4c0e"
- signature_nonce = "iobzx72w63"
- timestamp = "1755597512"
ขั้นตอนที่ 1: สร้าง stringToSign
access_key=1000000059&signature_method=md5&signature_nonce=iobzx72w63&signature_version=1.0×tamp=1755597512
ขั้นตอนที่ 2: คำนวณลายเซ็น
temp = md5("GET" + stringToSign) // 结果为"9bc92e0f3e239dc628ebc416294422ba"
signature = md5(AccessSecret + temp) // 结果为"a33bdb81ea79eb4ebbac9da043309c00"
URL คำขอสุดท้าย:
https://api.racent.com/api/v1/domain/tld?access_key=1000000059&signature_nonce=iobzx72w63×tamp=1755597512&signature_version=1.0&signature_method=md5&signature=a33bdb81ea79eb4ebbac9da043309c00
ตัวอย่างคำขอ POST (พร้อม Body)
สมมติว่า Body คือ:
{"domain":"example.com"}
ค่า MD5 คือ: 640c69595341436be9b0d1516d3d37ac
ขั้นตอนที่ 1: สร้าง stringToSign
access_key=1000000059&signature_method=md5&signature_nonce=abjipo5ar5a&signature_version=1.0×tamp=1755598851
ขั้นตอนที่ 2: คำนวณลายเซ็น
temp = md5("POST" + stringToSign) // 结果为 "5aba63e4af1b7a4080eaf47d0fc56efe"
signature = md5(AccessSecret + temp + "640c69595341436be9b0d1516d3d37ac") // 结果为 "29487fd8ae5b828415d05b691caf015c"
URL คำขอสุดท้าย:
https://api.racent.com/v1/domain/query-domain?access_key=1000000059&signature_nonce=abjipo5ar5a×tamp=1755598851&signature_version=1.0&signature_method=md5&signature=29487fd8ae5b828415d05b691caf015c
2.1.3 การจำกัดความถี่ของอินเทอร์เฟซ
กฎการจำกัดความถี่เริ่มต้น สำหรับผู้ใช้รายเดียวกันที่เรียกใช้อินเทอร์เฟซเดียวกัน จำกัดจำนวนครั้งดังนี้:
- 60 ครั้งต่อนาที
- 500 ครั้งต่อชั่วโมง
- 1000 ครั้งต่อวัน
2.1.4 พารามิเตอร์ตอบกลับของอินเทอร์เฟซ
คำอธิบายพารามิเตอร์
| ชื่อพารามิเตอร์ | ประเภทพารามิเตอร์ | คำอธิบาย | ตัวอย่างค่า |
|---|---|---|---|
| data | Object | ข้อมูลธุรกิจ หากอินเทอร์เฟซแจ้งข้อผิดพลาด ค่าที่ส่งกลับจะเป็น null | |
| code | Int | รหัสข้อผิดพลาด สำเร็จส่งกลับ 0 แจ้งข้อผิดพลาดส่งกลับรหัสข้อผิดพลาดที่เกี่ยวข้อง | 0,1000,1001 |
| message | String | ข้อมูลอธิบายข้อผิดพลาด อินเทอร์เฟซสำเร็จส่งกลับ "Success" | over-rate-limit |
| errors | Object | ข้อผิดพลาดบางกรณี จะให้คำอธิบายข้อผิดพลาดที่เฉพาะเจาะจงมากขึ้นผ่านฟิลด์นี้ | |
| request_id | String | ID คำขอ ใช้สำหรับช่วยในการตรวจสอบปัญหาเป็นหลัก | 039ecdca-44d5-430f-8521-020f4953bcc5 |