DEV Community

Cover image for httpYac คืออะไร
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

httpYac คืออะไร

หากคุณเคยค้นหา httpYac คุณน่าจะต้องการวิธีส่ง HTTP request จากไฟล์ข้อความธรรมดาที่เก็บใน Git ได้ เปิดใช้ใน VS Code ได้ และนำไปรันซ้ำใน CI ได้โดยไม่ต้อง export/import เพิ่มเติม httpYac ทำงานด้วยไฟล์ .http/.rest ผ่านทั้ง VS Code extension และ Node.js CLI บทความนี้พาเริ่มใช้งานแบบลงมือทำ ตั้งแต่โครงสร้างไฟล์ ตัวแปร assertion ไปจนถึงการรันใน CI และจุดที่ควรเลือกใช้ GUI platform แทนไฟล์ข้อความล้วน สำหรับพื้นฐานเพิ่มเติม ดู คู่มือการทดสอบ API

ลองใช้ Apidog วันนี้

httpYac คืออะไร

httpYac คือ HTTP client แบบโอเพนซอร์สที่ใช้ไฟล์ .http เป็นศูนย์กลาง คุณเขียน request เป็นข้อความธรรมดา แล้วส่ง request ได้จาก editor หรือจาก terminal ด้วยคำสั่งเดียว โปรเจกต์อยู่บน GitHub และมีเอกสารที่ httpyac.github.io

httpYac CLI

โมเดลหลักของ httpYac คือ:

  1. เก็บ request ไว้ข้างโค้ดใน repo
  2. review diff ได้ใน pull request
  3. ใช้ไฟล์เดียวกันทั้งตอนทดสอบในเครื่องและตอนรันใน CI
  4. ไม่ต้องมีขั้นตอน export collection แยกต่างหาก

เครื่องมือนี้มี 2 ส่วนหลัก:

  • VS Code extension: เพิ่มปุ่ม Send Request เหนือแต่ละ request, แสดง response preview และสลับ environment ได้จาก editor
  • CLI (httpyac): ติดตั้งผ่าน npm แล้วรันไฟล์ .http แบบ headless เหมาะสำหรับ CI/CD

เพราะทั้ง extension และ CLI อ่านไฟล์เดียวกัน สิ่งที่คุณ commit คือสิ่งที่ pipeline นำไปรันจริง

เริ่มต้นติดตั้ง httpYac

ติดตั้ง CLI ด้วย npm:

npm install -g httpyac
Enter fullscreen mode Exit fullscreen mode

ตรวจสอบว่าใช้งานได้:

httpyac --version
Enter fullscreen mode Exit fullscreen mode

ถ้าใช้ VS Code ให้ติดตั้ง extension ชื่อ httpYac แล้วสร้างไฟล์เช่น:

api/users.http
Enter fullscreen mode Exit fullscreen mode

จากนั้นคุณสามารถกด Send Request ใน VS Code หรือรันจาก terminal ได้ทันที

httpyac send api/users.http
Enter fullscreen mode Exit fullscreen mode

รูปแบบไฟล์ .http

ไฟล์ .http คือรายการ request ที่คั่นด้วย ### แต่ละ request เขียนใกล้เคียงกับ HTTP raw format

### Get a user
GET https://api.example.com/users/42
Accept: application/json

### Create a user
# @name createUser
POST https://api.example.com/users
Content-Type: application/json

{
  "name": "Ada Lovelace",
  "email": "ada@example.com"
}

### Use a value from the previous response
GET https://api.example.com/users/{{createUser.response.body.$.id}}
Authorization: Bearer {{token}}
Enter fullscreen mode Exit fullscreen mode

สิ่งที่ควรรู้จากตัวอย่างนี้:

  • ### ใช้แบ่ง request
  • # @name createUser ตั้งชื่อ request เพื่ออ้างอิง response ภายหลัง
  • {{...}} ใช้แทนค่าตัวแปรหรือค่าจาก response ก่อนหน้า
  • รูปแบบนี้คล้ายกับ REST Client extension จึงมักย้ายไฟล์ไปมาได้โดยแก้ไขเพียงเล็กน้อย

ใช้ตัวแปรและ environment

httpYac อ่านตัวแปรได้จากหลายแหล่ง เช่น .env, http-client.env.json และตัวแปร inline ในไฟล์ request

ตัวอย่างกำหนด host แบบ inline:

@host = https://api.staging.example.com

### Login
# @name login
POST {{host}}/auth/login
Content-Type: application/json

{
  "user": "{{USERNAME}}",
  "pass": "{{PASSWORD}}"
}
Enter fullscreen mode Exit fullscreen mode

เก็บ secret ไว้ใน .env และไม่ commit เข้า Git:

USERNAME=demo@example.com
PASSWORD=secret-password
Enter fullscreen mode Exit fullscreen mode

เพิ่ม .env ใน .gitignore:

.env
Enter fullscreen mode Exit fullscreen mode

ใน CI ให้ map ค่าเหล่านี้จาก environment variables หรือ secret manager ของ pipeline แทน เช่น GitHub Actions secrets, GitLab CI variables หรือ Jenkins credentials

เขียน request flow แบบ login แล้วใช้ token

กรณีใช้งานจริงมักต้อง login ก่อน แล้วนำ token ไปใช้กับ request ถัดไป

@host = https://api.staging.example.com

### Login
# @name login
POST {{host}}/auth/login
Content-Type: application/json

{
  "user": "{{USERNAME}}",
  "pass": "{{PASSWORD}}"
}

### Get profile
GET {{host}}/me
Authorization: Bearer {{login.response.body.$.token}}
Accept: application/json
Enter fullscreen mode Exit fullscreen mode

รูปแบบนี้เหมาะกับ smoke test หรือ integration check แบบสั้น ๆ เช่น:

  • login สำเร็จ
  • ดึงข้อมูลผู้ใช้ได้
  • สร้าง resource ได้
  • อ่าน resource ที่สร้างขึ้นได้
  • ลบ resource หลังทดสอบ

เพิ่ม assertion ด้วย JavaScript

httpYac รองรับการฝัง JavaScript เพื่อทำ pre-request และ post-request script ได้ คุณจึงตรวจ status code, body หรือ export ค่าไปใช้ต่อได้

### Login and capture token
# @name login
POST {{host}}/auth/login
Content-Type: application/json

{
  "user": "{{USERNAME}}",
  "pass": "{{PASSWORD}}"
}

{{
  // post-request script
  test("status is 200", () => {
    client.assert.strictEqual(response.statusCode, 200);
  });

  test("token exists", () => {
    client.assert.ok(response.parsedBody.token);
  });

  exports.token = response.parsedBody.token;
}}
Enter fullscreen mode Exit fullscreen mode

จากนั้นใช้ token ใน request ถัดไป:

### Get current user
GET {{host}}/me
Authorization: Bearer {{token}}

{{
  test("status is 200", () => {
    client.assert.strictEqual(response.statusCode, 200);
  });

  test("response has id", () => {
    client.assert.ok(response.parsedBody.id);
  });
}}
Enter fullscreen mode Exit fullscreen mode

แนวทางนี้เหมาะเมื่อคุณต้องการ logic เล็กน้อยโดยไม่ต้องสร้าง test framework เต็มรูปแบบ

รัน httpYac ใน CI

CLI คือจุดที่ทำให้ไฟล์ .http ใช้ได้จริงใน pipeline

npm install -g httpyac

# Run a single file
httpyac send api/users.http

# Run every request in a folder, pick an environment, fail on assertion errors
httpyac send --all --env staging "api/**/*.http"
Enter fullscreen mode Exit fullscreen mode

เมื่อ assertion ล้มเหลว httpYac จะ exit ด้วย non-zero status code ทำให้ CI job fail ได้ตามปกติ

ตัวอย่าง GitHub Actions แบบพื้นฐาน:

name: API checks

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  httpyac:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install httpYac
        run: npm install -g httpyac

      - name: Run API checks
        env:
          USERNAME: ${{ secrets.API_USERNAME }}
          PASSWORD: ${{ secrets.API_PASSWORD }}
        run: httpyac send --all --env staging "api/**/*.http"
Enter fullscreen mode Exit fullscreen mode

ถ้าทีมของคุณใช้ GitLab CI หรือ Jenkins หลักการเหมือนกัน: ติดตั้ง Node.js, ติดตั้ง httpyac, inject secret แล้วรันไฟล์ .http

ควรใช้ httpYac เมื่อใด

httpYac เหมาะเมื่อ workflow ของทีมเน้นไฟล์ข้อความและ Git เป็นหลัก

สถานการณ์ เหตุผลที่ httpYac เหมาะ
คุณใช้ VS Code เป็นหลัก ส่ง request ได้จาก editor โดยไม่ต้องสลับเครื่องมือ
คุณต้องการเก็บ request ใน Git ไฟล์ข้อความ diff ง่าย review ใน PR ได้
ทีมคุ้นเคยกับโค้ด ตัวแปร, .env และ JavaScript assertion เหมาะกับ developer
ต้องการ smoke test หรือ integration check จำนวนไม่มาก เพิ่มไฟล์และรันใน CI ได้เร็ว
ใช้ไฟล์ REST Client อยู่แล้ว รูปแบบไฟล์ใกล้เคียงกัน ทำให้ย้ายมาได้ง่าย

httpYac อาจไม่เหมาะเท่าไรเมื่อ:

  • คนที่ไม่ใช่นักพัฒนาต้องแก้ request บ่อย
  • ต้องการ UI สำหรับจัดการชุด request ขนาดใหญ่
  • ต้องการ environment ที่แชร์และ sync ให้ทั้งทีมโดยไม่ต้องจัดการไฟล์เอง
  • ต้องการ mock server, documentation และ reporting อยู่ในที่เดียว
  • ต้องการ onboarding สมาชิกใหม่โดยไม่ต้องอธิบายโครงสร้างไฟล์มาก

ข้อดีของไฟล์ข้อความจะชัดเจนมากในทีม developer-heavy แต่เมื่อชุด API โตขึ้นและมีหลาย role เข้ามาเกี่ยวข้อง GUI platform อาจจัดการง่ายกว่า

httpYac เทียบกับแพลตฟอร์ม GUI และ CI

httpYac คือเครื่องมือรัน request จากไฟล์ข้อความ ส่วน Apidog เป็น API platform แบบ GUI-first ที่สามารถทำงานร่วมกับ CI ได้เช่นกัน ทั้งสองแก้ปัญหาคนละมุม

จุดสำคัญที่ต้องเข้าใจก่อนคือ Apidog ไม่ได้รันหรือ parse ไฟล์ .http โดยตรง ถ้า source of truth ของคุณคือโฟลเดอร์ไฟล์ .http httpYac คือเครื่องมือที่เหมาะกับงานนั้นโดยตรง

ความสามารถ httpYac Apidog
แหล่งที่มาของ request ไฟล์ .http/.rest ใน Git request แบบภาพใน workspace รวมถึงการนำเข้า OpenAPI
วิธีแก้ไข เขียนข้อความใน VS Code หรือ editor ใดก็ได้ visual builder พร้อม form field และ schema awareness
ตัวแปรและ environment .env, JSON, inline variables environment ที่จัดการและแชร์กับทีมได้
Assertion JavaScript ใน request script visual assertion พร้อม scripting
การรันใน CI httpyac send apidog run
Mock และ documentation ไม่มีมาในตัว mock server และ documentation ในตัว
เหมาะสำหรับ developer ที่ต้องการไฟล์ข้อความใน Git ทีมที่ต้องการ design, test, mock และ docs ใน workspace เดียว

ถ้าคุณต้องการ workflow แบบภาพ Apidog ช่วยให้สร้าง จัดระเบียบ และแชร์ request ได้โดยไม่ต้องเขียนไฟล์ .http เอง จากนั้นรัน scenario เดียวกันใน CI ด้วย apidog run ดูรายละเอียดได้ที่ เอกสารอ้างอิง apidog run

หาก mock API เป็น requirement สำคัญ บทความ เครื่องมือจำลองปลายทาง REST ครอบคลุมตัวเลือกต่าง ๆ เพิ่มเติม

สรุปแบบใช้งานจริง:

  • ใช้ httpYac เมื่อ workflow คือ “ไฟล์ใน Git → รันใน editor → รันซ้ำใน CI”
  • ใช้ Apidog เมื่อทีมต้องการ shared workspace, managed environment, mock server, documentation และ CI runner
  • ใช้ ทั้งสองอย่าง ได้ ถ้าต้องการ httpYac สำหรับ local checks และ Apidog เป็น source of truth ระดับทีม

คำถามที่พบบ่อย

httpYac ฟรีหรือไม่

ฟรี httpYac เป็นโอเพนซอร์สภายใต้ MIT License ทั้ง VS Code extension และ CLI สามารถติดตั้งและใช้งานได้โดยไม่ต้องมี paid plan หรือบัญชีผู้ใช้สำหรับการรัน request ในเครื่องหรือใน CI

httpYac ต่างจาก REST Client extension อย่างไร

ทั้งสองใช้รูปแบบไฟล์ .http คล้ายกัน ทำให้ไฟล์พกพาได้ในหลายกรณี ความแตกต่างหลักคือ httpYac มี CLI แบบ standalone สำหรับการรัน headless และ CI รวมถึงความสามารถด้าน environment, scripting และ assertion ที่ครอบคลุมกว่า

ถ้าคุณส่ง request เฉพาะใน VS Code ทั้งสองตัวอาจเพียงพอ แต่ถ้าต้องรันไฟล์เดียวกันใน pipeline CLI ของ httpYac คือข้อได้เปรียบสำคัญ ดูภาพรวมเครื่องมือเพิ่มเติมได้ที่ ปลั๊กอิน VS Code สำหรับการทดสอบ API

httpYac แทนที่ Postman ได้หรือไม่

ได้ในบาง workflow โดยเฉพาะทีม developer ที่ต้องการ request แบบข้อความธรรมดา เก็บใน Git และรันใน CI โดยไม่ต้องใช้ GUI

แต่ถ้าทีมต้องการ shared collection แบบภาพ, managed environment, mock server และ documentation ในตัว แพลตฟอร์มอย่าง Apidog จะเหมาะกว่า เปรียบเทียบตัวเลือกอื่นได้ในบทความ ไคลเอนต์ทดสอบ API ยอดนิยม

httpYac รองรับ GraphQL และ gRPC หรือไม่

httpYac รองรับ GraphQL และโปรโตคอลอื่นนอกเหนือจาก REST รวมถึงบางกรณีของ streaming แต่ความสามารถอาจเปลี่ยนแปลงตาม release ควรตรวจเอกสารทางการสำหรับรายการ protocol ล่าสุด

สำหรับ REST ทั่วไป ไฟล์ .http ครอบคลุม verb, header, body และ authentication flow พื้นฐานได้ทันที

บทสรุป

httpYac เหมาะกับงานที่ชัดเจนมาก: เขียน HTTP request เป็นไฟล์ข้อความ เก็บใน Git รันจาก VS Code และรันซ้ำใน CI ด้วยไฟล์เดียวกัน จุดแข็งคือความเรียบง่าย, review ง่าย, script ได้ และมี CLI ฟรีสำหรับ pipeline

ข้อแลกเปลี่ยนคือ workflow นี้คาดหวังให้ผู้ใช้เข้าใจไฟล์, ตัวแปร, secret และ JavaScript assertion พอสมควร จึงเหมาะกับทีม developer-heavy มากกว่าทีมที่ต้องการ UI กลางสำหรับทุก role

ถ้าคุณต้องการสร้าง request ด้วยภาพ แชร์ environment ที่จัดการได้ จำลอง endpoint และสร้าง documentation พร้อมรัน test ใน CI Apidog รวมสิ่งเหล่านี้ไว้ใน workspace เดียว คุณสามารถ ดาวน์โหลด Apidog แล้วรันชุดทดสอบด้วย apidog run หรือใช้ httpYac สำหรับ local checks และให้ Apidog เป็น source of truth ของทีมก็ได้ เลือกโมเดลที่ตรงกับวิธีทำงานของทีมคุณ

Top comments (0)