เป็นเส้นบางๆ ระหว่างการเลือก Application Programming Interface (API) กับการตัดสินใจว่าคุณจะใช้งานได้หรือไม่ REST API ส่วนใหญ่มีสถาปัตยกรรมทั่วไปและเธรดเส้นทางคำขอทั่วไป แต่ API บางตัวเบี่ยงเบนไปจากมาตรฐาน จึงทำให้ใช้งานยาก
ดังนั้น ก่อนสร้างซอฟต์แวร์ทั้งหมดของคุณบน API คุณต้องทำการตรวจสอบคุณภาพและตรวจสอบว่าทำงานได้ดี การทดสอบ API คืออะไร และคุณจะทดสอบ API ได้อย่างไร
การทดสอบ API คืออะไร?
การทดสอบ API เกี่ยวข้องกับการประเมินเบื้องต้นเกี่ยวกับการทำงาน ความปลอดภัย ความสามารถในการปรับขนาด ความเร็ว และอื่นๆ ของ API เพื่อดูว่าเหมาะสำหรับโปรแกรมที่ต้องการใช้งานหรือไม่ แต่โดยผิวเผิน อาจเกี่ยวข้องกับการทดสอบเพื่อดูว่าส่งการตอบกลับที่เหมาะสมหรือไม่เมื่อคุณส่งคำขอผ่านจุดปลายต่างๆ
ขณะทดสอบ API คุณจะส่งคำขอ (รับ โพสต์ อัปเดต หรือลบ) ไปยังปลายทางที่เกี่ยวข้อง ทั้งนี้ขึ้นอยู่กับโครงสร้าง มีเมตริกมากมายให้ตรวจสอบระหว่างการทดสอบ API แต่ในระดับเริ่มต้น คุณต้องการตรวจสอบความสมบูรณ์ของ API จากรหัสสถานะและตรวจสอบให้แน่ใจว่าดึงข้อมูลและยอมรับข้อมูลที่ถูกต้อง
ด้วยเหตุนี้ เช่นเดียวกับคำขอทางเว็บใดๆ API อาจส่งคืนรหัสสถานะ 200, 400 หรือ 500 หรือแม้แต่อื่นๆ
API ส่วนใหญ่ใช้การตอบสนอง JSON เพื่อให้บริการเพย์โหลด ผู้อื่นอาจยอมรับและตอบกลับด้วยเพย์โหลด XML หลายส่วน หรือ HTML ทั้งนี้ขึ้นอยู่กับเป้าหมาย
วิธีทดสอบ API โดยใช้ Python และ JavaScript
แม้ว่าจะมีเครื่องมือทดสอบ API ของอินเทอร์เฟซผู้ใช้แบบกราฟิก (GUI) มากมายบนอินเทอร์เน็ต แต่คุณสามารถประเมิน API ที่มีวิกฤตมากขึ้นด้วยสคริปต์ที่เป็นลายลักษณ์อักษร
API จะบอกในเอกสารเกี่ยวกับประเภทของคำขอที่อนุญาตและให้ปลายทางที่เกี่ยวข้องแก่พวกเขา เพื่อให้คุณสามารถคว้าและทดสอบโดยใช้วิธีการขอที่เหมาะสม
ที่เกี่ยวข้อง: REST API คืออะไรและคุณจะดึงข้อมูลสำหรับแอพหรือเว็บไซต์ของคุณได้อย่างไร
การทดสอบ API นั้นไม่เหมือนกับขั้นตอนการผลิตจริง ดังนั้นคุณจึงไม่ต้องการความเฉพาะเจาะจงมากเท่าที่คุณต้องการในขณะที่ใช้งาน API สำหรับการผลิต แม้ว่าจะมีการทดสอบ API ประเภทต่างๆ แต่เราจะเน้นที่การทดสอบการตรวจสอบการตอบสนองในบทความนี้
เราจะทดสอบAPI ร้านค้าปลอมในบทช่วยสอนนี้โดยใช้การดึงข้อมูลของ JavaScript และไลบรารีคำขอของ Python ขณะทำเช่นนี้ เราจะทดสอบปลายทางสำหรับการรับ การโพสต์ การอัปเดต และการลบข้อมูล
วิธีทดสอบ Get API Endpoint ด้วย JavaScript
เช่นเดียวกับที่คุณใช้ในการผลิต คุณสามารถทดสอบ API ใน JavaScript โดยใช้Axiosหรือวิธีการดึงข้อมูล
ในการรับสถานะการตอบสนองจาก API โดยใช้fetch :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
คำขอข้างต้นส่งคืนสถานะ 200 หากเป็นการตอบกลับที่ถูกต้อง เมื่อคุณส่งคำขอสำเร็จแล้ว คุณสามารถขอข้อมูลแบบเรียลไทม์จาก API ได้
รับข้อมูลจาก API นี้:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
การตอบสนองต่อโค้ดดึงข้อมูลด้านบนมีลักษณะดังนี้:
เพื่อให้ได้ราคาของผลิตภัณฑ์ทั้งหมด ตัวอย่างเช่น คุณสามารถใช้ฟังก์ชันแผนที่ :
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ response.map(data =>{ console.log(data.price) }) // console.log(response) }).catch(err => console.log(err))
ด้านบนบันทึกผลลัพธ์ต่อไปนี้:
การทดสอบ Get Endpoint ด้วย Python
ดังที่กล่าวไว้ก่อนหน้านี้ Python ยังใช้ไลบรารีคำขอเพื่อเข้าถึงข้อมูลของ API
วิธีตรวจสอบสถานะของการตอบกลับในกรณีนี้:
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
การบันทึกข้อมูลที่เราทำข้างต้นจะส่งคืนสถานะที่เกี่ยวข้อง มัน 200 ในกรณีนี้แม้ว่า
มาดูข้อมูลเดียวกันกับ Python ที่เราทำตอนใช้ JavaScript กัน:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
ผลลัพธ์ข้างต้นมีลักษณะดังนี้:
คุณจะได้รับข้อมูลที่เฉพาะเจาะจงใช้สำหรับวง
เพื่อรับราคาสินค้า เช่น
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() indexes = 0 for i in myData: goods = myData[indexes] indexes +=1 print(goods["price"])
นี่คือผลลัพธ์ที่ดูเหมือน:
การทดสอบจุดสิ้นสุดของโพสต์ด้วย JavaScript
หลังจากการทดสอบและเห็นว่ารับงานคำขอขึ้นอยู่กับจุดมุ่งหมายของคุณและสิ่งที่เป็นข้อเสนอ API คุณอาจต้องการตรวจสอบว่าคุณสามารถแทรกข้อมูลลงในมันเกินไป
ตรงกันข้ามกับวิธีสร้างคำขอรับคำขอโพสต์จะยอมรับเพย์โหลด นอกจากนี้ คุณจะต้องระบุว่าเป็นคำขอโพสต์:
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products', { method: "Post", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload to JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
รหัสด้านบนจะบันทึกรหัสสถานะการตอบสนองและข้อมูลใหม่ที่แทรกเมื่อคุณเรียกใช้ สิ่งนี้จะบอกคุณว่าคำขอของคุณผ่านหรือไม่ โดยปกติ หากรหัสสถานะคือ 200 ดังนั้น API ของคุณจะมีปลายทางที่ถูกต้องซึ่งส่งคืนการตอบกลับที่เหมาะสม
ทดสอบคำขอโพสต์ด้วย Python
นอกจากนี้คุณยังสามารถทดสอบปลายทางโพสต์ของ API ที่ใช้ ธrequests.post อย่างที่คุณทำในขณะที่ใช้การดึงข้อมูลของ JavaScript คุณต้องระบุเพย์โหลดที่นี่ด้วย:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.post('https://fakestoreapi.com/products', data = payload ) print(Posted.status_code) print(Posted.json())
เช่น JavaScript ข้างต้นรหัสหลามนอกจากนี้ยังบันทึกรหัสสถานะการตอบสนองและข้อมูลใหม่ที่ระบุไว้ในส่วนของข้อมูล
การทดสอบพุตปลายทาง
การอัปเดตข้อมูล API ใช้กระบวนการเดียวกับการโพสต์และรับข้อมูลทั้งสองภาษา
ในการดำเนินการนี้โดยใช้การดึงข้อมูลของ JavaScript คุณจะต้องแทนที่Postด้วยPut :
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products/19', { method: "Put", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload into JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
หากคุณให้ความสนใจกับปลายทาง API คุณจะเห็นว่าคราวนี้มีรหัสผลิตภัณฑ์รวมอยู่ด้วย นี่คือวิธีที่ API รู้ว่าข้อมูลใดที่คุณต้องการอัปเดตในกรณีนี้
อย่างไรก็ตาม API บางตัวอาจใช้วิธีอื่นเพื่อสร้างปลายทาง นั่นจึงไม่ใช่มาตรฐาน
ในการทดสอบการอัปเดตข้อมูล API โดยใช้ Python คุณต้องใช้request.putแทน:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.put('https://fakestoreapi.com/products/19', data = payload ) print(Posted.status_code) print(Posted.json())
ตัวอย่างข้างต้น หากสำเร็จ ให้แทรกข้อมูลใหม่ลงในตำแหน่ง 19 ตามที่ระบุโดยปลายทาง API
การทดสอบคำขอลบ
การลบข้อมูลจาก API นั้นง่ายพอๆ กับการสร้างคำขอรับ นั่นเป็นเพราะ คุณไม่จำเป็นต้องระบุเพย์โหลด ซึ่งต่างจาก Post and Put สิ่งที่คุณต้องมีคือจุดสิ้นสุดการลบ
API ที่เราเลือกที่นี่ใช้รหัสผลิตภัณฑ์เพื่อติดตามข้อมูล ดังนั้นการลบผลิตภัณฑ์จึงเป็นเรื่องง่าย:
fetch('https://fakestoreapi.com/products/19', { method: "Delete", headers:{ 'Content-Type': 'application/json' } } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
คุณต้องการโค้ดเพียงไม่กี่บรรทัดเพื่อทำสิ่งเดียวกันโดยใช้ Python:
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
ทั้งสองตัวอย่างข้างต้นบันทึกรหัสสถานะการตอบสนองและข้อมูลที่เป็นของ id ที่สืบค้น (19 ในกรณีนี้)
วิธีการทดสอบเหล่านี้เป็นแบบทั่วไปหรือไม่?
แม้ว่าเราจะเน้นไปที่ API เดียวในโพสต์นี้ แต่วิธีการที่ใช้ในการทดสอบปลายทาง CRUD นั้นไม่แตกต่างกันเมื่อจัดการกับ API อื่นๆ แน่นอนว่าข้อแตกต่างเพียงอย่างเดียวอาจอยู่ในกฎที่ล้อมรอบแต่ละโครงสร้าง API และหลักเกณฑ์ในการขอข้อมูล เมื่อคุณถอดรหัสสิ่งเหล่านี้สำหรับ API ที่เลือก คุณสามารถใช้วิธีการที่เหมาะสม ดังที่อธิบายไว้ที่นี่ เพื่อทดสอบปลายทางที่สอดคล้องกัน
ดังนั้น เนื่องจาก API ทุกตัวมีกฎสำหรับการเชื่อมต่อกับ API ดังนั้นในขณะที่ทำการทดสอบ บางส่วนอาจมีพารามิเตอร์เพิ่มเติมเพื่อให้คุณรวมไว้ในส่วนหัวของคำขอ พารามิเตอร์ดังกล่าวมักจะรวมโทเค็นการเข้าถึงหรืออื่น ๆ ตามที่ระบุในเอกสาร