ไทย

ค้นพบพลังของ OpenAPI Specification (OAS) คู่มือนี้ครอบคลุมทุกอย่างตั้งแต่แนวคิดหลักและประโยชน์ ไปจนถึงตัวอย่างการใช้งานจริง และอนาคตของการออกแบบ API-first

วิวัฒนาการของเอกสาร API: คู่มือฉบับสมบูรณ์สำหรับ OpenAPI Specification

ในโลกดิจิทัลที่เชื่อมต่อกันอย่างยิ่งยวดในปัจจุบัน Application Programming Interfaces (APIs) คือเส้นใยที่มองไม่เห็นซึ่งถักทอซอฟต์แวร์และบริการต่างๆ ของเราเข้าไว้ด้วยกัน พวกมันคือเครื่องยนต์ของเศรษฐกิจดิจิทัลสมัยใหม่ ที่ขับเคลื่อนทุกสิ่งตั้งแต่โมบายแบงก์กิ้งไปจนถึงฟีดโซเชียลมีเดีย แต่เมื่อจำนวนของ API เพิ่มขึ้นอย่างมหาศาล ความท้าทายที่สำคัญก็เกิดขึ้น: นักพัฒนา ระบบ และองค์กรจะสื่อสารกันอย่างมีประสิทธิภาพและปราศจากความคลุมเครือได้อย่างไร? เราจะแน่ใจได้อย่างไรว่า API ที่สร้างขึ้นในส่วนหนึ่งของโลกจะสามารถถูกเรียกใช้งานโดยบริการในอีกส่วนหนึ่งได้อย่างราบรื่น?

คำตอบนั้นอยู่ในภาษากลาง ซึ่งเป็นสัญญาที่เป็นสากลที่อธิบายความสามารถของ API ในรูปแบบที่ทั้งมนุษย์และเครื่องจักรสามารถเข้าใจได้ นี่คือบทบาทของ OpenAPI Specification (OAS) OAS เป็นมากกว่าแค่เอกสาร แต่เป็นมาตรฐานพื้นฐานสำหรับการออกแบบ สร้าง จัดทำเอกสาร และใช้งาน RESTful APIs คู่มือนี้จะพาคุณเจาะลึกเข้าไปใน OpenAPI Specification สำรวจว่ามันคืออะไร ทำไมจึงสำคัญ และคุณจะใช้ประโยชน์จากมันเพื่อสร้างผลิตภัณฑ์ดิจิทัลที่ดีขึ้นและทำงานร่วมกันได้ดียิ่งขึ้นได้อย่างไร

OpenAPI Specification คืออะไร? ภาษาสากลสำหรับ API

โดยแก่นแท้แล้ว OpenAPI Specification คือมาตรฐานและคำอธิบายอินเทอร์เฟซสำหรับ RESTful APIs ที่ไม่ขึ้นกับภาษาโปรแกรมใดๆ (language-agnostic) มันช่วยให้คุณสามารถกำหนดโครงสร้างทั้งหมดของ API ของคุณได้ในไฟล์เดียว ซึ่งโดยทั่วไปจะเขียนด้วย YAML หรือ JSON ลองนึกภาพว่ามันเป็นพิมพ์เขียวโดยละเอียดของอาคาร ก่อนที่จะเริ่มการก่อสร้าง พิมพ์เขียวจะระบุทุกห้อง ทุกประตู และทุกเต้ารับไฟฟ้า ในทำนองเดียวกัน เอกสาร OpenAPI จะอธิบายถึง:

ประวัติย่อ: จาก Swagger สู่ OpenAPI

คุณอาจเคยได้ยินคำว่า "Swagger" ถูกใช้สลับกับ OpenAPI สิ่งสำคัญคือต้องเข้าใจความสัมพันธ์ของทั้งสองคำนี้ ข้อกำหนดนี้เริ่มต้นในชื่อ Swagger Specification ในปี 2010 โดย Tony Tam ที่ Reverb เมื่อได้รับความนิยมอย่างล้นหลาม จึงได้ถูกบริจาคให้กับ Linux Foundation ในปี 2015 และเปลี่ยนชื่อเป็น OpenAPI Specification เพื่อสถาปนาให้เป็นมาตรฐานเปิดอย่างแท้จริงภายใต้การดูแลของ OpenAPI Initiative ซึ่งเป็นสมาคมของผู้นำในอุตสาหกรรม เช่น Google, Microsoft และ IBM

ในปัจจุบัน Swagger หมายถึงชุดเครื่องมือโอเพนซอร์สและเครื่องมือระดับมืออาชีพที่ทรงพลังซึ่งทำงานร่วมกับ OpenAPI Specification เช่น Swagger UI สำหรับการสร้างเอกสารแบบโต้ตอบ และ Swagger Editor สำหรับการเขียนข้อกำหนด

องค์ประกอบหลักของเอกสาร OpenAPI

เอกสาร OpenAPI มีโครงสร้างพร้อมชุดฟิลด์ที่เฉพาะเจาะจง แม้ว่าในตอนแรกอาจดูน่ากลัว แต่ก็มีการจัดระเบียบอย่างมีเหตุผล เรามาดูองค์ประกอบหลักของเอกสาร OpenAPI 3.x โดยใช้ YAML เนื่องจากมนุษย์อ่านได้ง่ายกว่า

1. อ็อบเจกต์ `openapi` และ `info`: ข้อมูลพื้นฐาน

เอกสาร OpenAPI ทุกฉบับจะเริ่มต้นด้วยเวอร์ชันและข้อมูลเมตาที่จำเป็น

ตัวอย่าง:


openapi: 3.0.3
info:
  title: Global Book Catalog API
  description: API สำหรับเข้าถึงแคตตาล็อกหนังสือจากทั่วโลก
  version: 1.0.0
  contact:
    name: ทีมสนับสนุน API
    url: http://www.example.com/support
    email: support@example.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html

2. อาร์เรย์ `servers`: ตำแหน่งของ API ของคุณ

อาร์เรย์ servers ใช้ระบุ URL พื้นฐานสำหรับ API ของคุณ คุณสามารถกำหนดเซิร์ฟเวอร์ได้หลายตัวสำหรับสภาพแวดล้อมที่แตกต่างกัน เช่น development, staging และ production ซึ่งช่วยให้เครื่องมือสามารถสลับระหว่างสภาพแวดล้อมต่างๆ ได้อย่างง่ายดาย

ตัวอย่าง:


servers:
  - url: https://api.example.com/v1
    description: เซิร์ฟเวอร์ใช้งานจริง (Production Server)
  - url: https://staging-api.example.com/v1
    description: เซิร์ฟเวอร์ทดสอบ (Staging Server)

3. อ็อบเจกต์ `paths`: หัวใจของ API

นี่คือที่ที่คุณกำหนด Endpoint ของ API ของคุณ อ็อบเจกต์ paths จะเก็บ Path ของ URL ทั้งหมดไว้ จากนั้นแต่ละ Path จะอธิบาย Operation ของ HTTP (get, post, put, delete, ฯลฯ) ที่สามารถดำเนินการบน Path นั้นได้

ภายในแต่ละ Operation คุณสามารถกำหนดรายละเอียดต่างๆ ได้แก่:

4. อ็อบเจกต์ `components`: องค์ประกอบที่นำกลับมาใช้ใหม่ได้

เพื่อหลีกเลี่ยงการเขียนโค้ดซ้ำซ้อน (ตามหลักการ DRY), OpenAPI มีอ็อบเจกต์ components ซึ่งเป็นคุณสมบัติที่ทรงพลังที่คุณสามารถกำหนดองค์ประกอบที่นำกลับมาใช้ใหม่ได้ และอ้างอิงถึงพวกมันได้ทั่วทั้งข้อกำหนดของคุณโดยใช้ตัวชี้ $ref

5. อ็อบเจกต์ `security`: การใช้การยืนยันตัวตน

เมื่อคุณกำหนด securitySchemes ของคุณใน Components แล้ว อ็อบเจกต์ security จะถูกใช้เพื่อนำไปใช้งาน คุณสามารถใช้การรักษาความปลอดภัยกับทั้ง API ในระดับภาพรวม หรือในระดับแต่ละ Operation ได้ ซึ่งช่วยให้สามารถผสมผสานระหว่าง Endpoint ที่เป็นสาธารณะและที่ต้องมีการป้องกันได้

ทำไมองค์กรของคุณควรนำ OpenAPI มาใช้: ประโยชน์ทางธุรกิจและทางเทคนิค

การนำ OpenAPI Specification มาใช้ไม่ใช่แค่ทางเลือกทางเทคนิค แต่เป็นการตัดสินใจเชิงกลยุทธ์ที่ช่วยขับเคลื่อนประสิทธิภาพ การทำงานร่วมกัน และคุณภาพตลอดทั้งวงจรการพัฒนาซอฟต์แวร์

สำหรับนักพัฒนา: แหล่งข้อมูลจริงเพียงหนึ่งเดียว (Single Source of Truth)

สำหรับผู้จัดการผลิตภัณฑ์และสถาปนิก: การออกแบบและการกำกับดูแล

สำหรับผู้ทดสอบและทีม QA: การตรวจสอบที่คล่องตัวขึ้น

สำหรับผู้ใช้ปลายทางและพันธมิตร: ประสบการณ์นักพัฒนาที่เหนือกว่า (Developer Experience - DX)

คู่มือปฏิบัติ: การสร้างเอกสาร OpenAPI ฉบับแรกของคุณ

มาเปลี่ยนทฤษฎีสู่การปฏิบัติโดยการสร้างข้อกำหนด OpenAPI 3.0 พื้นฐานสำหรับ "Global Book Catalog API" ของเรา เราจะใช้ YAML เพื่อความสะดวกในการอ่าน

ขั้นตอนที่ 1: กำหนดข้อมูลพื้นฐานและเซิร์ฟเวอร์

เราเริ่มต้นด้วยข้อมูลเมตาและ URL ของเซิร์ฟเวอร์ Production


openapi: 3.0.3
info:
  title: Global Book Catalog API
  description: API สำหรับเข้าถึงแคตตาล็อกหนังสือจากทั่วโลก
  version: 1.0.0
servers:
  - url: https://api.globalbooks.com/v1

ขั้นตอนที่ 2: กำหนดโมเดลข้อมูลที่ใช้ซ้ำได้ใน `components`

ก่อนที่จะกำหนด Endpoint ของเรา เรามาสร้าง Schema ที่นำกลับมาใช้ใหม่ได้สำหรับอ็อบเจกต์ `Book` กันก่อน วิธีนี้จะช่วยให้การออกแบบของเราสะอาดและสอดคล้องกัน


components:
  schemas:
    Book:
      type: object
      properties:
        isbn:
          type: string
          description: หมายเลขหนังสือมาตรฐานสากล (ISBN)
          example: '978-0321765723'
        title:
          type: string
          description: ชื่อหนังสือ
          example: 'The C++ Programming Language'
        author:
          type: string
          description: ผู้แต่งหนังสือ
          example: 'Bjarne Stroustrup'
        publicationYear:
          type: integer
          description: ปีที่หนังสือตีพิมพ์
          example: 2013
      required:
        - isbn
        - title
        - author

ขั้นตอนที่ 3: กำหนด Endpoint ใน `paths`

ตอนนี้เราจะสร้างสอง Endpoint: หนึ่งสำหรับดึงรายชื่อหนังสือ และอีกหนึ่งสำหรับดึงหนังสือเล่มใดเล่มหนึ่งตาม ISBN

สังเกตการใช้ $ref: '#/components/schemas/Book' นี่คือวิธีที่เราอ้างอิงถึง Schema ของ `Book` ที่เราสร้างไว้เพื่อใช้ซ้ำ


paths:
  /books:
    get:
      summary: แสดงรายการหนังสือทั้งหมดที่มี
      description: คืนค่ารายการหนังสือ ซึ่งสามารถกรองได้
      operationId: listBooks
      responses:
        '200':
          description: การตอบกลับที่สำเร็จพร้อมอาร์เรย์ของหนังสือ
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Book'

  /books/{isbn}:
    get:
      summary: ดึงข้อมูลหนังสือตาม ISBN
      description: คืนค่าหนังสือเล่มเดียวที่ระบุโดย ISBN
      operationId: getBookByIsbn
      parameters:
        - name: isbn
          in: path
          required: true
          description: ISBN ของหนังสือที่ต้องการดึงข้อมูล
          schema:
            type: string
      responses:
        '200':
          description: หนังสือที่ร้องขอ
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Book'
        '404':
          description: ไม่พบหนังสือที่มี ISBN ที่ระบุ

ขั้นตอนที่ 4: เพิ่มการรักษาความปลอดภัย

เรามาป้องกัน API ของเราด้วย API Key ง่ายๆ ที่ต้องส่งมาในเฮดเดอร์กันก่อน ก่อนอื่นเรากำหนดรูปแบบ (scheme) ใน `components` จากนั้นจึงนำไปใช้กับทั้งระบบ


# เพิ่มส่วนนี้ใน 'components'
components:
  # ... schemas จากก่อนหน้า
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

# เพิ่มส่วนนี้ที่ระดับรากของเอกสาร
security:
  - ApiKeyAuth: []

ขั้นตอนที่ 5: ตรวจสอบและแสดงผล

เมื่อคุณมีไฟล์ YAML ที่สมบูรณ์แล้ว คุณสามารถใช้เครื่องมือต่างๆ ได้:

ระบบนิเวศของ OpenAPI: เครื่องมือและเทคโนโลยี

พลังของ OAS ได้รับการขยายขีดความสามารถจากระบบนิเวศของเครื่องมือที่กว้างขวางและสมบูรณ์ ไม่ว่าความต้องการของคุณจะเป็นอะไร ก็มีแนวโน้มที่จะมีเครื่องมือสำหรับสิ่งนั้น:

อนาคตของ OpenAPI: OAS 3.1 และต่อจากนี้

OpenAPI Specification มีการพัฒนาอย่างต่อเนื่อง เวอร์ชันหลักล่าสุด OAS 3.1 ได้นำเสนอการปรับปรุงที่สำคัญหลายประการ:

ความก้าวหน้าเหล่านี้ตอกย้ำตำแหน่งของ OpenAPI ในฐานะสิ่งประดิษฐ์ศูนย์กลางในสถาปัตยกรรมสมัยใหม่ที่ยึด API เป็นหลัก และขับเคลื่อนด้วยเหตุการณ์

สรุป: รากฐานที่สำคัญของการพัฒนายุคใหม่

OpenAPI Specification ได้เปลี่ยนวิธีคิดของเราเกี่ยวกับ API มันได้ยกระดับเอกสาร API จากงานที่น่าเบื่อและมักถูกละเลย ให้กลายเป็นเอกสารเชิงกลยุทธ์ที่มีชีวิตซึ่งขับเคลื่อนวงจรการพัฒนาทั้งหมด ด้วยการทำหน้าที่เป็นสัญญาที่เครื่องจักรสามารถอ่านได้ OAS ส่งเสริมการทำงานร่วมกัน เปิดใช้งานระบบอัตโนมัติที่ทรงพลัง บังคับใช้ความสอดคล้อง และท้ายที่สุดนำไปสู่การสร้าง API ที่ดีขึ้น น่าเชื่อถือมากขึ้น และใช้งานง่ายขึ้น

ไม่ว่าคุณจะเป็นนักพัฒนา สถาปนิก ผู้จัดการผลิตภัณฑ์ หรือผู้ทดสอบ การยอมรับ OpenAPI Specification เป็นขั้นตอนสำคัญสู่การเป็นผู้เชี่ยวชาญในการพัฒนาซอฟต์แวร์สมัยใหม่ หากคุณยังไม่ได้ใช้งาน ลองเริ่มต้นกับโปรเจกต์ต่อไปของคุณ กำหนดสัญญาก่อน แบ่งปันกับทีมของคุณ และปลดล็อกระดับใหม่ของประสิทธิภาพและความชัดเจนในการทำงานร่วมกันทางดิจิทัลของคุณ