Technology

[Dev Tip] เรียก REST API ง่าย ๆ บน PHP ด้วย Httpful

By Arnon Puitrakul - 03 เมษายน 2016

[Dev Tip] เรียก REST API ง่าย ๆ บน PHP ด้วย Httpful

ในสมัยนี้ใครที่เขียนโปรแกรมที่ไม่รู้จักคำว่า API ก็คงจะน้อยแล้ว และในตอนนี้อีกเหมือนกันคำว่า REST API ก็มาแรงเช่นกัน (เหรอ ??) แต่พอผมลองไปหาใน Google เพื่อจะหาวิธีใช้ก็เจออยู่ แต่วิธีมันค่อนข้างที่จะยากสำหรับมือใหม่อยู่บ้าง วันนี้เลยจะมานำเสนอวิธีง่าย ๆ ในการเรียก REST API สำหรับมือใหม่ ที่พึ่งเคยใช้จริง ๆ กันดีกว่า

REST API คืออะไร ?

REST หรือ Representational State Transfer มันเป็นวิธีในการสร้าง Web Service รูปแบบนึงที่อาศัย HTTP Method (GET, POST, PUT, DELETE) ในการทำงาน และส่งผลกลับมาในรูปแบบของ JSON หรือ XML ส่งผลให้สามารถรับส่งข้อมูลไปมาข้าม Platform ได้อย่างสะดวกมาก เพราะเป็นการเรียกผ่าน HTTP Protocol ที่ใช้ในการเรียกเว็บไซต์อยู่แล้ว และอีกอย่างหนึ่งที่ทำให้ REST เป็นที่นิยมคือ เรื่องของการใช้ Traffic เนื่องจากว่า เวลา REST มันส่งค่ากลับมา มันจะส่งกลับมาในรูปแบบของ JSON หรือ XML ซึ่งมีขนาดเล็ก และ Extract ออกมาใช้ได้อย่างง่ายดาย
REST ถูกพูดถึงครั้งแรกน่าจะสักประมาณปี 2000 ซึ่งตอนนั้นผมก็ยังไม่รู้จักเหมือนกัน มารู้จักก็ตอนปี 2008 ไปแล้ว เมื่อก่อนนั้นก็ยังไม่มีใครเลย แต่ในปัจจุบันบริษัทไอทีใหญ่ ๆ ที่ให้บริการ API หลาย ๆ เจ้าก็ปรับตัวมาใช้ REST กันแทบจะหมดแล้ว ทำให้คนส่วนใหญ่หันมาใช้กันหมด และมีคำสั่งและ Library หลาย ๆ ตัวที่ออกมา Support REST ทำให้เขียนได้ง่ายขึ้นกว่าเดิมเยอะมาก ๆ

HTTP Structure

ตัว REST นั้นใช้ HTTP Protocol ในการรับส่งข้อมูลไปมาระหว่าง Web Service และ Client ซึ่งการรับส่งข้อมูลบน HTTP Protocol ก็จะมีโครงสร้างการเรียกข้อมูลของมันอยู่ โดยมันจะหน้าตาแบบข้างล่างนี่เลย

initial line
header1: value 1
header2: value 2
...
headerN: value N
blankLine
message body

ถ้ายังนึกไม่ออกลองเปิด Inspector ใน Google Chrome ดูในแถบ Network ถ้าเรากดเข้าไปมันจะบอกว่าหน้าเว็บที่เราเปิดอยู่มันโหลดอะไรไปบ้าง เวลาเท่าไหร่ แต่สิ่งที่ให้ดูคือ รูปแบบของ Header จะเห็นได้ว่า เหมือนกันเลยเนอะะะ

RESTful_php_1

Header คือ Description ของข้อมูลที่ส่งไป หรือได้รับมาว่า มันคืออะไร มันก็คือการบอก Properties ของ Request นั่น ๆ นั่นเอง ซึ่งอันนี้ในการเรียกใช้ REST API ก็ต้องใช้นะ
กับอีกส่วนนึงที่อยากให้วนใจนั่นคือ Method ของมัน (ไม่มีในรูปภาพ แต่ลองเลื่อน ๆ อ่าน Request ใน Google Chrome ดูมัน่าจะมีคำว่า GET หรือ POST อะไรทำนองนี้อยู่ เราเรียกพวกนี้ว่า HTTP Method เอาไว้บอกว่า สิ่งที่รับหรือส่งมา มันเอามาทำอะไรกัน โดยมันจะมีคร่าว ๆ อยู่ 4 Methods ด้วยกัน

  • GET - อันนี้เอาไว้ เรียก ข้อมูล เหมือนกับ SELECT ในภาษา SQL
  • POST - เอาไว้ส่งข้อมูล เหมือนกับ CREATE
  • PUT - เอาไว้ส่งข้อมูลเหมือนกัน แต่จะส่งค่าไปได้ด้วย อารมณ์เดียวกับ UPDATE ที่ต้องบอก ID หรือ Condition ต่าง ๆ ของ Record ที่ต้องการ Update ข้อมูล
  • DELETE - อันนี้ไม่น่าจะต้องพูดอะไรมาก มันคือการลบข้อมูลนั่นเอง

เรียก REST API ด้วย Httpful

RESTful_php_2

หลังจากที่เรารู้คร่าว ๆ ถึงการทำงานของ REST กันไปแล้ว เราลองมาเรียกมันกันเลยดีกว่า ซึ่งในภาษา PHP มันก็มีคำสั่งที่ใช้เรียกอยู่หลายตัวด้วยกัน แต่เท่าที่เคยคุยกับมือใหม่ดูแล้ว ก็ไม่ค่อยโอเท่าไหร่ วันนี้เลยจะมาแนะนำให้รู้จักกับ Httpful ซึ่งเป็น Library ที่ช่วยทำให้เราสามารถเรียก REST API ได้โดยที่ไม่ต้องรู้อะไรเลยจริง ๆ โคตรจะง่ายเลยจริง ๆ นะ

ติดตั้ง Httpful

การติดตั้งก็ไม่ได้ยากอะไรเลย เพียงแค่ไปโหลดไฟล์ .phar จากเว็บไซต์ของ Httpful มาและทำการก๊อปปี้ไปไว้ใน Directory ของเว็บเรา จากนั้นก็เพียงแค่ใช้คำสั่ง Include มันเข้ามาก็เป็นอันเรียบร้อยแล้ว
นอกจากที่จะติดตั้งผ่านไฟล์ .phar แล้วยังสามารถทำผ่าน Composer ได้เช่นกันโดยการเข้าไปแก้ไฟล์ composer.json ตามด้านล่างให้เรียบร้อย

{
    "require": {
        "nategood/httpful": "*"
    }
}

ลองเรียกกันเลยดีกว่า

ใน Step แรกเราลองมาเรียก Geocoding API ง่าย ๆ ของ Google กันก่อน โดยผมมี url ของ API อยู่แล้วนั่นคือ

https://maps.googleapis.com/maps/api/geocode/json?address=Bangkok

ถ้าเราลองเข้าดูมันจะมีข้อมูลตัวหนังสือออกมาในรูปแบบของ JSON ถ้าใช้ Google Chrome มันจะมี Plugin ไว้อ่านของพวกนี้โดยเฉพาะเลยนะ แต่ถ้าเป็นฝั่ง OSX จะมีโปรแกรมตัวหนึ่งชื่อ Paw (เป็นโปรแกรมเสียเงินนะ ค่อนข้างแพงอยู่ แต่ถ้าต้องทำงานพวกนี้บ่อย ๆ ก็คุ้มอยู่นะ)

JSON From REST API

ทีนี้เราจะมาเขียนโปรแกรมเพื่อเรียก JSON นี้ออกมากัน โดยโค๊ตที่ใช้จะประมาณด้านล่างเลย

include "httpful.phar";
$uri = "https://maps.googleapis.com/maps/api/geocode/json?address=Bangkok";
$response = \Httpful\Request::get($uri)->send();
echo $response;

เท่านี้เราก็จะได้ String ที่มี Content เหมือน JSON ที่ให้ดูเมื่อสักครู่แล้วจากนั้น เราจะเอามันมาทำอะไรต่อก็เรื่องของเราแล้ว อาจจะเอามันมาใส่ Function json_decode() เพื่อแปลงจาก JSON ให้กลายเป็น Array เพื่อความสะดวกในการเข้าถึงข้อมูล
สำหรับบาง API จำเป็นที่จะต้องมีการเติม Custom Header เข้าไปต่าง ๆ เช่นเพื่อการ Authenticate อะไรเป็นต้น เราสามารถเรียกคำสั่ง AddHeader เพื่อเติม Header ได้ ตัวอย่างเช่นโค๊ตด้านล่าง เอามาจากเว็บของ Httpful

$response = \Httpful\Request::get($uri)
    ->addHeaders(array(
       'Header1' => 'Value 1',
       'Header2' => 'Value 2'));
    ->send();

ถ้าใครเคยศึกษาการเรียก REST API บน PHP มาก่อนจะเห็นได้ว่า การใช้ Httpful ทำให้การเรียก REST API นั่นง่ายขึ้นมาก ๆ เลย โดยส่วนตัวแล้วก็ชอบนะ ทำให้งานไวขึ้นเยอะเลย
นอกจากที่เล่นให้ดูคร่าว ๆ แล้วมันยังมีเรื่องอื่นๆ อยู่อีกนะลองเข้าไปอ่าน Document %B

Read Next...

เลือกซื้อ Music Steaming เจ้าไหนดีในปี 2024

เลือกซื้อ Music Steaming เจ้าไหนดีในปี 2024

มาถึง Content ที่คนถามเข้ามาเยอะมากว่า ในปี 2024 ในไทยเรามี Music Streaming เข้ามาเปิดหลายเจ้ามาก ๆ ตั้งแต่ Spotify, Apple Music, Youtube Music และ Tidal เราควรจะเลือกเจ้าไหนดี วันนี้เราจะมาวัดจาก Indication 5 อย่างด้วยกัน แล้วลองมาสรุปคะแนนดูว่า เราน่าจะเหมาะกับเรื่องแบบไหนกันดีกว่า...

External HDD เสียอย่าพึ่งทิ้ง มาเปลี่ยน HDD กันเถอะ

External HDD เสียอย่าพึ่งทิ้ง มาเปลี่ยน HDD กันเถอะ

เรื่องของเรื่องมีอยู่ว่า Desktop External HDD คู่ใจของเราอย่าง My Book มันมีอาการแปลก ๆ มาสักพัก ไฟล์บางไฟล์อ่านไม่ได้ และบางครั้งก็ช้า จนพบว่า อ๋อ น้องลาโลกแล้ว แต่เราจะบอกว่า คนที่เจออาการแบบนี้ อย่าพึ่งทิ้งนะ เพราะเราสามารถซื้อ HDD มาเปลี่ยนแล้วใช้งานต่อได้ วันนี้เราจะมาเล่าให้อ่านกัน...

ใช้ HDD ขนาดใหญ่ หรือ HDD ขนาดเล็กจำนวนมากใน NAS ดี?

ใช้ HDD ขนาดใหญ่ หรือ HDD ขนาดเล็กจำนวนมากใน NAS ดี?

จากเมื่อเดือนก่อน ๆ เราเล่าเรื่องที่เราเปลี่ยน HDD ไปในความจุที่ใหญ่ขึ้น ทำให้เราคิดย้อนตอนที่เรา Design NAS ที่จะใช้ในบ้านครั้งแรกว่า เราควรจะใช้ HDD ขนาดเท่าไหร่ดี จะใช้ HDD ขนาดความจุเล็ก ๆ จำนวนมาก หรือเอาความจุสูง ๆ ไม่กี่ลูกดีกว่า วันนี้เราเอาประสบการณ์มาเล่ากัน...

Dual Stack และ Tunnelling วิธีการเชื่อมโลก IPv4 และ IPv6 เข้าด้วยกัน

Dual Stack และ Tunnelling วิธีการเชื่อมโลก IPv4 และ IPv6 เข้าด้วยกัน

ปัจจุบันนี้เรามีการใช้ IPv6 มากขึ้นเรื่อย ๆ แน่นอนว่ายังไม่เท่ากับอุปกรณ์ที่ทำงานบน IPv4 และทั้งสอง Version นี้ไม่สามารถเชื่อมต่อคุยกันได้โดยตรง ทำให้เราจำเป็นต้องมีเทคนิคบางอย่าง วันนี้เราจะมาเล่าให้อ่านกันว่า เขาทำกันยังไง...