เปลี่ยน WordPress ให้เป็น Backend ด้วยพลังของ REST API

|
7 นาที ในการอ่าน

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

คนเริ่มใช้ WordPress เป็น Backend มากขึ้น

ในช่วงไม่กี่ปีที่ผ่านมา การใช้งาน WordPress ในฐานะ Backend กำลังเป็นที่นิยมมากขึ้น สาเหตุหลักมาจากการที่นักพัฒนาเริ่มหันไปใช้ React และ Vue.js ในการสร้าง Frontend และใช้ WordPress API (REST API) นั้นสามารถทำงานร่วมกับ Frameworks เหล่านี้ได้อย่างราบรื่น ทำให้ WordPress ไม่ได้เป็นแค่ระบบจัดการเนื้อหา (CMS) อีกต่อไป แต่กลายเป็นเครื่องมือที่สามารถใช้เป็น Backend ในการเก็บและส่งข้อมูลไปยัง Frontend ได้

WordPress API เริ่มต้นมีอะไรมาให้ใช้บ้าง ?

ใน WordPress REST API เวอร์ชัน 2 (/v2) ได้รวมเครื่องมือที่จำเป็นสำหรับการสร้างและจัดการข้อมูลผ่าน API เอาไว้ในตัวระบบ ซึ่งทำให้นักพัฒนาสามารถเข้าถึงและจัดการข้อมูลบนเว็บไซต์ได้อย่างสะดวก โดยการทำงานกับ REST API จะใช้รูปแบบ URL เฉพาะเพื่อเรียกข้อมูลในรูปแบบ JSON


ตัวอย่าง URL ที่ใช้ในการเข้าถึงข้อมูลผ่าน API จะมีรูปแบบดังนี้:

https://yoursite.com/wp-json/wp/v2/

ในโครงสร้าง URL นี้:

  • https://yoursite.com: คือโดเมนของเว็บไซต์ WordPress ของคุณ
  • /wp-json: เป็นเส้นทางพื้นฐานสำหรับการเข้าถึง REST API ของ WordPress
  • /wp/v2/: เป็นเส้นทางเฉพาะที่บ่งบอกว่าคุณกำลังใช้ WordPress REST API เวอร์ชัน 2

โดยการต่อท้าย URL ด้วยเส้นทางที่เฉพาะเจาะจง คุณสามารถเข้าถึงข้อมูลต่างๆ เช่น โพสต์, เพจ, เมตาดาต้า และข้อมูลผู้ใช้ได้ ตัวอย่างเช่น:

  • /posts: เพื่อดึงข้อมูลโพสต์ทั้งหมด
  • /pages: เพื่อดึงข้อมูลเพจทั้งหมด
  • /users: เพื่อดึงข้อมูลผู้ใช้


เมื่อคุณเข้าถึง URL นี้ คุณจะได้รับข้อมูลโพสต์ทั้งหมดในรูปแบบ JSON ซึ่งสามารถนำไปใช้งานต่อในแอปพลิเคชันหรือเว็บ Frontend ที่คุณพัฒนาได้ทันที

ตัวอย่างในการเข้าถึง REST API

การดึงข้อมูลโพสต์ (Posts)

https://yoursite.com/wp-json/wp/v2/posts

การดึงข้อมูลโพสต์ตาม ID

https://yoursite.com/wp-json/wp/v2/posts/{ID}

การดึงข้อมูลเพจ (Pages)

https://yoursite.com/wp-json/wp/v2/pages
ตัวอย่างข้อมูลที่ได้จาก Rest API ของการดึงโพสต์
ตัวอย่างข้อมูลที่ได้จาก REST API ของการดึงโพสต์

วิธีปรับแต่ง API ด้วยตัวเอง

ถ้าคุณต้องการเพิ่มฟิลด์ข้อมูลไปยัง WordPress REST API โดยไม่ใช้ปลั๊กอินเพิ่มเติม คุณสามารถใช้ฟังก์ชัน register_rest_field ร่วมกับการใช้ hook rest_api_init ในไฟล์ functions.php ของธีมได้เลย วิธีการนี้จะทำให้คุณสามารถจัดการข้อมูลได้อย่างดีที่สุด

ตัวอย่าง ในการสร้าง field “pin” ไว้ใน API ของ /v2/posts

function add_custom_fields_to_post_api() {
    // ฟังก์ชั่นสำหรับเพิ่ม field ใน API
    register_rest_field(
        'post', // ประเภทของข้อมูลที่ต้องการเพิ่มฟิลด์
        'pin', // ชื่อฟิลด์ที่ต้องการเพิ่มใน API
        array(
            'get_callback'    => 'get_post_meta_for_api',
            'schema'          => null,
        )
    );
}

function get_post_meta_for_api($object) {
    return get_post_meta($object['id'], 'pin', true);
}

add_action('rest_api_init', 'add_custom_fields_to_post_api');

ตัวอย่าง ในการสร้าง REST API เส้นใหม่ขึ้นมาเลย จะได้เส้นที่ชื่อว่า /v2/messages

function register_custom_api_routes() {
    register_rest_route(
        'v2', // เวอร์ชั่น
        '/messages', // ชื่อ Route
        array(
            'methods'  => 'GET', // HTTP (GET, POST, etc.)
            'callback' => 'get_custom_messages', // ฟังก์ชั่นที่ return        )
    );
}

add_action('rest_api_init', 'register_custom_api_routes');

function get_custom_messages() {
    // รีเทิร์นข้อมูลสำหรับ API
    $messages = array(
        array(
            'id'      => 1,
            'message' => 'Hello, this is the first custom message!',
        ),
        array(
            'id'      => 2,
            'message' => 'Here is another custom message.',
        ),
    );

    return rest_ensure_response($messages);
}

การเพิ่มข้อมูล ACF ไปยัง REST API

ปรับ ACF ให้แสดงใน API ไปด้วย
ปรับ ACF ให้แนบไปใน API

ในเวอร์ชั่นใหม่ของ ACF มีฟีเจอร์ที่ให้คุณสามารถเปิดใช้งานการแนบข้อมูลฟิลด์ไปกับ REST API ได้ทันที โดยคุณสามารถเปิดใช้งานฟีเจอร์นี้ได้ที่หน้าการตั้งค่าของฟิลด์กรุ๊ป ACF > Field Group > Group Settings > Show in REST API

เมื่อเปิดใช้งานแล้ว ACF จะผูกฟิลด์ต่าง ๆ กับ Post Type หรือ Page ที่กำหนดไว้ และเมื่อเรียกใช้ REST API ฟิลด์เหล่านี้จะถูกรวมเข้ากับข้อมูลใน API โดยอัตโนมัติ

เพิ่มความปลอดภัยให้ REST API ทำยังไงได้บ้าง

ตัว REST API ที่ WordPress มีมาให้มีลักษณะเปิดเป็นสาธาราณะ เราสามารถใช้หลายวิธีในการป้องกันการเข้าถึงสำหรับคนทั่วไป ไม่ว่าจะเป็นการใช้ Auth, Token หรือการทำ Whitelist โดยผมจะใช้ตัวอย่างป้องกันการเข้าถึงที่ง่ายที่สุดในตอนนี้ก็คือ Whitelist

ตัวอย่างนี้ จะทำการ Whitelist โดยตรวจสอบ IP ที่เรียกใช้ API

function restrict_api_access_by_ip($result) {
    // รายการ IP ที่อนุญาต
    $allowed_ips = array(
        '123.456.789.000', // ใส่ข้อมูล IP ที่อนุญาตให้ใช้ API
        '111.222.333.444',
    );

    // ดึง IP ที่ทำการเรียกใช้ API
    $ip_address = $_SERVER['REMOTE_ADDR'];

    // ตรวจสอบ IP ถ้าไม่ได้อยู่ในรายกาารที่ไม่อนุญาตให้แสดง error
    if (!in_array($ip_address, $allowed_ips)) {
        return new WP_Error('rest_forbidden', 'Your IP address is not allowed to access this API.', array('status' => 403));
    }

    return $result;
}

add_filter('rest_authentication_errors', 'restrict_api_access_by_ip');

ตัวอย่างนี้ จะทำการ Whitelist โดยตรวจสอบ Domain ที่เรียกใช้ API

function restrict_api_access_by_domain($result) {
    // รายการ Domain ที่อนุญาต
    $allowed_domains = array(
        'https://allowed-domain.com',
        'https://another-allowed-domain.com',
    );

    // ดึง Domaiin ที่ทำการเรียกใช้ API
    $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';

    // ตรวจสอบ Domain ถ้าไม่ได้อยู่ในรายกาารที่ไม่อนุญาตให้แสดง error
    if (!in_array($origin, $allowed_domains)) {
        return new WP_Error('rest_forbidden', 'Your domain is not allowed to access this API.', array('status' => 403));
    }

    return $result;
}

add_filter('rest_authentication_errors', 'restrict_api_access_by_domain');

หากคุณต้องการศึกษาเพิ่มเติมเกี่ยวกับการใช้งาน WordPress REST API คุณสามารถเข้าไปอ่านรายละเอียดเพิ่มเติมได้ที่เว็บไซต์ทางการของ WordPress โดยตรง ซึ่งมีเอกสารและตัวอย่างการใช้งานอย่างครบถ้วนที่: https://developer.wordpress.org/rest-api/

Designil PDPA Banner Thai Woo AIO Banner
แชร์:
line

author - aum watcharapon
อั้ม วัชรพล
👨🏻‍💻 ผู้เชี่ยวชาญทางด้าน WordPress

Subscribe to newsletter

doaction จะส่งเพื่อแจ้งเตือนเมื่อมีบทความใหม่ๆ ในเว็บไซต์และสามารถกดยกเลิกได้ตลอดเวลา

บทความอื่นๆ

ปลอดภัยอีกขั้น เพิ่ม Layer ด้วยการซ่อน wp-login ให้ WordPress

การไม่ซ่อนหน้า wp-login.php ในเว็บไซต์ WordPress บน Production เป็นประเด็นที่สำคัญในด้านความปลอดภัย แม้ว่าจะเป็นเพียงหนึ่งในหลาย ๆ มาตรการที่ควรนำมาปฏิบัติ การซ่อนหน้า wp-login.php สามารถช่วยลดความเสี่ยงจากการโจมตีแบบ Brute Force ซึ่งเป็นการพยายามสุ่มรหัสผ่านเพื่อเข้าสู่ระบบ นอกจากจะเพิ่มความเสี่ยงต่อการถูกแฮกแล้ว ยังอาจทำให้เซิร์ฟเวอร์ทำงานหนักขึ้นจากการโจมตีด้วยการสุ่มรหัสผ่านอย่างต่อเนื่อง หากต้องการเปิดหน้า wp-login.php เอาไว้ก็สามารถทำได้ แต่ควรมีการตั้งค่าจำกัดจำนวนครั้งในการพยายามเข้าสู่ระบบ และหากเกินจำนวนที่กำหนดก็สามารถตั้งค่าให้แบน IP ได้ วิธีนี้ดีกว่าการเปิดไว้โดยไม่มีการจำกัดอะไรเลย เนื่องจาก bot มักจะวิ่งหา wp-login.php โดยอัตโนมัติและพยายามเข้าสู่ระบบ หากเราเปลี่ยน URL ของหน้าล็อกอิน ก็จะช่วยถ่วงเวลาให้ bot หาหน้าล็อกอินได้ยากขึ้น ซึ่งช่วยเพิ่มความปลอดภัยให้กับเว็บไซต์ได้มากขึ้น คำแนะนำเรื่องการป้องกัน Brute Force จาก WordPress โดยตามคำแนะนำเป็นทางการของ WordPress เรื่องการป้องกัน Brute Force แนะนำให้ทั้งหมดดังนี้ วิธีการสร้าง .htpasswd เพื่อป้องกันการเข้าถึง wp-login โดยตรง วิธีการซ่อนการเข้าถึง […]

อ่านต่อ

หากมีคำถาม หรือต้องการคำปรึกษาเกี่ยวกับ WordPress

สำนักงาน

  • บริษัท ดู แอคชั่น จำกัด
    66 ซอยเพชรเกษม 98/1, ถนนเพชรเกษม,
    แขวงบางแคเหนือ, เขตบางแค
    กรุงเทพมหานคร
    10160

เราใช้คุกกี้เพื่อสร้างประสบการณ์ที่ดี มีประสิทธิภาพยิ่งขึ้น

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • เปิดใช้งานตลอด

บันทึกการตั้งค่า