เนื่องจากในทุก ๆ วันนั้น เราต้องทำการติดต่อสื่อสารไปยังระบบอื่น ๆ เสมอ ดังนั้นเพื่อช่วยให้เรามีความเชื่อมั่นในสิ่งที่ทำ จำเป็นต้องทดสอบในระดับ integration บ่อย ๆ ส่วน Unit test ก็ยังมีความจำเป็นของการทำงานแต่ละส่วนภายในนั่นเอง
URL ของ API ต้องง่ายต่อการเปลี่ยน
นั่นหมายความว่าทางผู้เรียกใช้งาน API นั้น ต้องสามารถเปลี่ยน URL ได้ง่าย ไม่ได้ทำการ hard code เอาไว้
ผลที่ตามมาคือ คนเรียกใช้งาน API สามารถเปลี่ยนไปใช้ server อื่น ๆ ได้ง่าย เช่น local server เป็นต้น โดยที่ไม่ต้องมาแก้ไข code อีกต่อไป
ถ้าเป็นการเรียกจากระบบงานของเรา แล้วทำการเปลี่ยน URL มาเป็น local server การทดสอบนั้นเราจะเรียกว่า component testing นั่นเอง
ต่อมาถ้าเราทดสอบแบบ integration test ได้แล้ว น่าจะต้องบันทึกการเรียกใช้งานได้
เพื่อความง่ายต่อการทดสอบแล้วนั้น เราต้องพิจารณาการบันทึก request และ response ของ API ที่เราเรียกใช้งานไว้ด้วยเสมอ เพื่อนำมาใช้ประโยชน์ของการทดสอบ ทั้งดูการเปลี่ยนแปลง ทั้งนำมาจำลองใน local server ทั้งนำมาใช้ในการทดสอบระดับอื่น ๆ
การใช้งาน API Gateway นั้นมักจะใช้ใน traffic ที่เรียกว่า North-South traffic
ซึ่งเป็นการติดต่อสื่อสารระหว่างระบบภายในและภายนอก หรือการติดต่อจาก public zone มายัง private zone ซึ่งจะผ่านตัว API Gateway ก่อนเสมอ เปรียบได้กับ ตม. เข้าประเทศนั่นเอง
สุดท้ายลองตอบคำถามให้ได้ก่อนว่า
ทำไมคุณถึงใช้งาน API Gateway มิใช่เพียงบอกว่า เราหรือเขาบอกว่าต้องใช้งาน มิเช่นนั้น ของที่มีประโยชน์อาจจะกลายเป็นโทษก็ได้
มันคือแนวทางที่เรียบง่ายและไม่ก่อให้เกิดความซับซ้อนจนเกินไป แน่นอนว่า เป็นอีกแนวทางของการพัฒนาที่ไม่ค่อยมีการสอนหรือพูดถึงเท่าไร โดยที่จะเรียนรู้ DO นั้นควรที่จะ unlearn หรือลืมสิ่งที่เรียนและรู้มาไปก่อน
ในการออกแบบตามแนวทางของ DO นั้น
เน้นไปที่ data collections ประกอบไปด้วย data ที่ไม่สามารถถูกแก้ไขหรือเปลี่ยนแปลงได้ (immutable data) ส่วน data นั้นจะถูกจัดการผ่าน function หนึ่ง ๆ ซึ่งภายใน function นั้น ๆ สามารถใช้งาน data collection อื่น ๆ ได้ ไม่จำเป็นต้องทำงานกับ data หนึ่ง ๆ ไป จะเรียก function เหล่านี้ว่า generic function
สิ่งที่ DO ให้ความสำคัญมาก ๆ คือ
Mutation of data คือ การแก้ไขหรือเปลี่ยนแปลง data
The coupling of code and data คือ การผูกมัดระหว่าง code ที่ทำงานกับ data
ถ้า data มีการเปลี่ยนแปลง และ code กับ data ผูกมัดกันอย่างมาก ผลที่ตามมาคือ ความซับซ้อนของระบบนั่นเอง ทั้งกระบวนการทำการแก้ไขข้อมูล ว่าต้องเป็นอย่างไร ใครบ้างที่ได้รับอนุญาต ยิ่งการทำงานแบบ multi-thread แล้ว ยิ่งต้องสร้างตัวจัดการมาอีกมากมาย จะดีกว่าไหม ถ้าไม่ให้เปลี่ยนแปลงไปเลย
ข้อมูลพื้นฐานของ DO คือ entity
ซึ่งมันคือ data collection ที่เป็น immutable โดย collection มันก็คือ dictionary data structure ที่ประกอบไปด้วย key กับ value ยกตัวอย่างเช่น
ใช้สำหรับการตั้งชื่อของ test case ผ่าน anotation ชื่อว่า @DisplayName ช่วยทำให้เราสามารถตั้งชื่อ test case ได้ง่ายและสะดวก รวมทั้งสามารถเขียนอธิบายในรูปแบบของการเล่า และอธิบายเรื่องราวของ test case นั้น ๆ ได้ชัดเจนมากยิ่งขึ้น
สุดท้ายชื่อ test case ในส่วนนี้ จะแสดงผลในส่วนของ test report อีกด้วย อีกอย่างสามารถใส่พวก space bar, emoji และ สัญลักษ์ต่าง ๆ ได้
Nested test/class หรือ inner class นั้น ช่วยให้เราสามารถจัดกลุ่มของ test class ที่เกี่ยวข้องกันอยู่ด้วยกัน ทำให้ทำความเข้าใจกับชุดการทดสอบได้ง่ายขึ้น โดยใช้งานผ่าน annotation ชื่อว่า @Nested
Nested test สามารถเข้าถึงตัวแปรระดับ class จาก class หลักได้ นั่นคือการ share data ระหว่างกัน
เรื่องที่ 4 Tag
Tag นั้นสร้างมาเพื่อแทนที่ Category ใน JUnit 4 เพื่อทำการแบ่งกลุ่มของการทดสอบ ทั้งในระดับ class และ method ใช้งานผ่าน annotaion ชื่อว่า @Tag
เรื่องที่ 5 Assertion
Assertion นั้นใช้สำหรับการตรวจสอบว่า ผลการทำงานเป็นไปตามที่เราคาดหวังหรือไม่ ซึ่งในทุก ๆ test case ต้องมีเสมอ