Kiểm tra khả năng truy cập API

Kiểm tra URL hoặc HTML theo WCAG 2.2 A / AA bằng axe-core: thiếu alt ảnh, nhãn form, tên link và nút, lỗi ARIA, thứ tự heading và nhiều lỗi khác.

GETPOSThttps://apibox.io.vn/v1/a11y-check

Gửi html (mã nguồn trang) hoặc một url công khai. Trang được phân tích thành DOM mà không cần trình duyệt và kiểm tra bằng bộ quy tắc axe-core (Deque, MPL-2.0) theo level WCAG đã chọn (a, aa mặc định, aaa) cùng các thực hành tốt: alt của ảnh, nhãn form, tên link và nút, tiêu đề và ngôn ngữ trang, thứ tự heading, landmark, danh sách, bảng, role và giá trị thuộc tính ARIA, id ARIA trùng, giá trị autocomplete, chặn phóng to trong thẻ meta viewport, tiêu đề iframe…

Mỗi lỗi có mã quy tắc, impact (critical, serious, moderate, minor), tiêu chí WCAG (ví dụ 1.1.1), link hướng dẫn và tối đa max_nodes phần tử vi phạm kèm CSS selector, đoạn HTML và cách sửa. score (0-100) tóm tắt kết quả; needs_review liệt kê các kiểm tra axe chưa kết luận được.

Các quy tắc cần trang đã hiển thị (tương phản màu, kích thước vùng chạm, khoảng cách chữ, vùng cuộn, thứ tự focus) không được chạy và được liệt kê trong not_checked; nội dung do JavaScript thêm vào không được thấy. Kiểm tra tự động chỉ phát hiện một phần lỗi WCAG, nên hãy kiểm tra thủ công thêm. HTML tối đa 3 MB.

Tham số

TênVị tríKiểuBắt buộcMặc định
urlbody|querystringkhôngTrang công khai cần tải (HTML tối đa 3 MB). Dùng html cho trang cần đăng nhập.
htmlbodystringkhôngMã nguồn trang cần kiểm tra (hoặc gửi dạng body text/html).
levelbody|querystringkhôngaaMức WCAG: a, aa hoặc aaa.
best_practicesbody|querybooleankhôngtrueGồm các quy tắc best practice của axe (thứ tự heading, landmark, heading rỗng…).
max_nodesbody|querynumberkhông10Số phần tử vi phạm trả về cho mỗi quy tắc (1-100).
include_passesbody|querybooleankhôngfalseLiệt kê cả các quy tắc đạt.
experimentalbody|querybooleankhôngfalseGồm các quy tắc thử nghiệm của axe.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/a11y-check" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html":"<!doctype html><html><head><title>Shop</title></head><body><img src=\"logo.png\"><a href=\"/cart\"></a><form><input type=\"email\" placeholder=\"Email\"><button></button></form></body></html>"}'

Kết quả trả về

{
  "source": "html",
  "url": null,
  "level": "AA",
  "score": 75,
  "issues": 8,
  "by_impact": {
    "critical": 2,
    "serious": 2,
    "moderate": 4,
    "minor": 0
  },
  "rules": {
    "checked": 83,
    "failed": 7,
    "needs_review": 1,
    "not_checked": 8
  },
  "violations": [
    {
      "rule": "button-name",
      "impact": "critical",
      "level": "A",
      "wcag": [
        "4.1.2"
      ],
      "best_practice": false,
      "help": "Buttons must have discernible text",
      "description": "Ensure buttons have discernible text",
      "help_url": "https://dequeuniversity.com/rules/axe/4.14/button-name?application=axeAPI",
      "count": 1,
      "nodes": [
        {
          "target": "button",
          "html": "<button></button>",
          "failure": "Element does not have inner text that is visible to screen readers | aria-label attribute does not exist or is empty | …"
        }
      ]
    },
    {
      "rule": "image-alt",
      "impact": "critical",
      "level": "A",
      "wcag": [
        "1.1.1"
      ],
      "best_practice": false,
      "help": "Images must have alternative text",
      "description": "Ensure <img> elements have alternative text or a role of none or presentation",
      "help_url": "https://dequeuniversity.com/rules/axe/4.14/image-alt?application=axeAPI",
      "count": 1,
      "nodes": [
        {
          "target": "img",
          "html": "<img src=\"logo.png\">",
          "failure": "Element does not have an alt attribute | …"
        }
      ]
    },
    "…"
  ],
  "needs_review": [
    {
      "rule": "bypass",
      "impact": "serious",
      "help": "Page must have means to bypass repeated blocks",
      "wcag": [
        "2.4.1"
      ],
      "…": "…"
    }
  ],
  "not_checked": [
    {
      "rule": "avoid-inline-spacing",
      "wcag": [
        "1.4.12"
      ],
      "reason": "needs the CSS object model"
    },
    {
      "rule": "color-contrast",
      "wcag": [
        "1.4.3"
      ],
      "reason": "needs rendered colours and layout"
    },
    "…"
  ],
  "engine": "axe-core 4.14.0 (static DOM, no layout)",
  "ms": 34,
  "note": "Static check without a browser: colour contrast, target size, focus order and anything that depends on CSS layout or scripts are not tested. …"
}

Ứng dụng

  • Kiểm tra trang trước khi ra mắt theo Đạo luật Tiếp cận châu Âu hoặc yêu cầu của cơ quan nhà nước
  • Thêm bước kiểm tra khả năng truy cập vào CI cho site tĩnh và template
  • Tìm ảnh thiếu alt và ô nhập liệu không có nhãn trên toàn site
  • Lập danh sách lỗi WCAG cho báo cáo đánh giá gửi khách hàng

Hỏi đáp

Có giống chạy axe trong trình duyệt không?

API chạy cùng bộ quy tắc axe-core trên DOM tĩnh. Các quy tắc cần bố cục hoặc màu đã tính (tương phản màu, kích thước vùng chạm) không chạy được và nằm trong not_checked; nội dung do JavaScript tạo ra không được kiểm tra.

Kiểm tra theo phiên bản WCAG nào?

Các quy tắc WCAG 2.0, 2.1 và 2.2 đến mức bạn chọn (A, AA mặc định, hoặc AAA), cùng các quy tắc best practice của axe trừ khi best_practices=false.

Điểm được tính thế nào?

Bắt đầu từ 100 và trừ theo mỗi quy tắc bị vi phạm tuỳ mức độ (critical 10, serious 6, moderate 3, minor 1) so với số quy tắc đã kiểm tra. Dùng để theo dõi tiến độ, không phải chứng nhận tuân thủ.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →