Call API Service ภายนอกจาก Nodejs[ExpressJs] ด้วย library request

Ploy Thanasornsawan
2 min readApr 24, 2019

การทำงานข้ามแพลตฟอร์ม อย่างโปรเจคของเราเขียนด้วย Nodejs แต่อีก service ใช้แพลตฟอร์มภาษา php การที่เราจะไปดึงข้อมูล data จาก api นั้น ทำได้ยังไงบ้าง

อย่างเช่นเราออกแบบระบบเติมเงินเกมโดยให้ตัดผ่านบัตร Truemoney แต่ว่าเจ้าของบริษัท Truemoney เองก็ไม่ได้มี api ให้เรียกใช้แจกให้กับ developer ดังนั้นเราก็ต้องไปหาบริษัทที่เป็นตัวกลางให้เรียกใช้ api payment ได้ แต่เขาก็จะมีคิดค่าธรรมเนียมตัวกลางตอนถอนเงินออกมาอีกที ในที่นี้คือเลือกใช้ของ Tmpay (ปล. ไม่ได้ค่าโฆษณาแต่อย่างใดและเมื่อสมัครบนเว็บไซต์เสร็จ เขาก็จะมีเอกสาร document api ให้เลยสำหรับภาษา php ซึ่งแปลว่าถ้าเรายังยืนกรานจะใช้ nodejs อยู่เราก็ต้องมา adapt ลองยิง request จากตัวแปรที่เขาให้ในเอกสารแล้วล่ะว่าจะทำยังไงให้ได้เหมือน api ภาษา php ของเขา)

อันนี้ขอยกตัวอย่างเคสที่เคยทำ เรื่องการส่ง request ไปยังเว็บ tmpay เพื่อทำการยืนยันตัวตนร้านค้าด้วยเลข merchant_id และโอนเงินด้วยรหัส truemoney ซึ่ง ณ ที่นี้ในโค๊ดใช้ชื่อตัวแปรว่า password เข้ามายังฟังก์ชั่น tmpay เพื่อส่งข้อมูล request สองตัวแปรนี้ไปยังเว็บไซต์ https://www.tmpay.net/TPG/backend.php แล้วก็กำหนดให้ว่า response ตอบกลับจาก service api นี้เข้าช่องทาง path ไหน ในที่นี้กำหนดตัวแปรชื่อ resp_url เก็บค่าตัวแปร url ตอบกลับ

หมายเหตุ: การร้องขอข้อมูลข้ามระหว่าง domain จะต้องเป็น https เหมือนกันทั้งสองฝั่ง ซึ่งในที่นี้เรากำหนดให้ url สำหรับรับข้อมูลเป็น https://yourwebsite.com/check/truemoney

การจะส่ง request ไปยัง service อื่นได้บน nodejs จะต้องมีการลง library เพิ่มเติมที่ชื่อว่า request ซึ่งหลังทำการ “ npm install request ” เรียบร้อยแล้ว หลังลงเสร็จเราก็มาสร้างไฟล์ index.js ตามนี้

const express = require(‘express’);
global.request = require(‘request’);

const app = express();
var port = process.env.PORT || 8082;
app.listen(port, function () { console.log(‘Starting node.js on port ‘ + port);});

สามารถดูข้อมูลเพิ่มเติม library request ได้จาก

ตัวอย่างการใช้ request-promise

จากนั้นลองสร้างฟังก์ชั่นสำหรับการ request ข้อมูลไปยัง api service tmpay

ในตัวอย่างเป็นวิธีการเขียน call back function ให้ตอบกลับข้อมูลกลับมาในลักษณะ promise โดยการโยนค่า resolve ออกไป เพราะว่าเราต้องการสร้าง api get url ในลักษณะ async เราจึงจำเป็นต้องใช้การ return ค่าเป็น promise ในฟังก์ชั่นนี้

app.get(‘/check/truemoney’,async function (req, res) {
let query = req.query //ดูก้อนข้อมูลตอบกลับทั้งหมด
});

หมายเหตุ: สำหรับการใช้ฟังก์ชั่น promise, async/await ซึ่งเป็นมาตรฐาน ES2017 จะถูก support บน nodejs version 7.10 ขึ้นไปเท่านั้น

ขออ้างอิงเหตุผลการใช้ Promise, Async, Await จากบล็อคนี้เพื่อให้ผู้อ่านเข้าใจ

--

--

Ploy Thanasornsawan
Ploy Thanasornsawan

Written by Ploy Thanasornsawan

Sharing knowledge about security and automation techniques.

No responses yet