Giang Coffee
4 min readDec 21, 2018

Giới thiệu về Restify: Rest api framework cho JS

Rest API là gì?

Rest Api là một tập các quy tắc hướng dẫn các developer thiết kế web service thông qua giao thức HTTP. Rest Api chỉ thực sự chứng tỏ giá trị của nó khi khái niệm Software As A Service ra đời và SOAP bộc lộ sự hạn chế của nó. Nếu các service của bạn chỉ phục vụ mục đích nội bộ một tổ chức thì sẽ không bắt buộc phải thiết kế theo chuẩn Rest Api. Bạn hoàn toàn có thể dùng các cách khác để giao tiếp giữa các tiến trình, các module với nhau như : socket, queue, file hay bất cứ thứ gì khác.

Gần đây, với sự nổi lên của Single Page Application (SPA) framework (AngularJS, ReactJS, VueJs …) thì vai trò của Rest Api lại càng được củng cố. Với các trang web kiểu SPA này thì các phần nhỏ của trang web được cập nhật dựa trên data trả về từ các lời gọi Rest Api chứ không load lại hoàn toàn như phương pháp post back thông thường. Đã có rất nhiều framework ra đời giúp việc thiết kế Rest Api trở nên đơn giản hơn: .NET có, PHP có, JAVA có, rồi Python, Go Lang … Nhưng hôm nay mình sẽ hướng dẫn các bạn một cách đơn giản sử dụng NodeJs để thiết kế Rest api.

Framework chúng tả sử dụng hôm nay đó là restify, một framework được tạo ra để hỗ trợ thiết kế Rest Api, ta có thể thấy ngay từ cái tên của nó. Có một điều thú vị là chính trình quản lý gói của chúng ta npm cũng đang sử dụng framework này.

1. Những thứ cần chuẩn bị

  • Bạn cần cài đặt sẵn NodeJs (khuyến nghị >= 8.11) và Npm (khuyến nghị >= 5.6). Kiểm tra bằng lệnh node --versionnpm --version
  • Một IDE tốt (khuyến nghị WebStorm)
  • Rest client để test (khuyến nghị Advanced Rest Client) hoặc có thể là curl
  • Cài git và một tài khoản GitHub vì code mẫu mình sẽ đẩy lên GitHub.
  • Một chút kiến thức về các lệnh cơ bản trên linux

2. Khởi tạo dự án

Đầu tiên là tạo cấu trúc thư mục như sau:

$ mkdir restify_part1
$ cd restify_part1
$ mkdir src

Sau đó tạo file package.json với nội dung như sau:

{
"name": "restify_tutorial_part1",
"version": "1.0.0",
"description": "Restify tutorial part1",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
},
"repository": {
"type": "git",
"url": "restify_tutorial_part1" // điền url git của bạn nếu có
},
"keywords": [
"restify"
],
"author": "GiangCoffee", // tên bạn
"license": "ISC",
"dependencies": {
"restify": "^7.2.1"
}
}

bạn có thể dùng lệnh npm init và trả lời các câu hỏi để cuối cùng sẽ tạo ra file package.json như trên. Có mấy điểm cần chú ý trong file ở trên đó là :

  • dependencies: danh sách các gói phần mềm phụ thuộc của dự án theo cú pháp [tên gói]:[version]. Ký tự ^ có ý nghĩa là lấy phiên bản chính (major release) mới nhất của version 7, ví dụ: 7.5.1, 7.6.0… Ký tự ~ có ý nghĩa *lấy phiên bản phụ (minor release) mới nhất của major release 7.2, ví dụ: 7.2.4, 7.2.8 …
  • scripts: định nghĩa các shortcut có thể chạy thông qua lệnh npm run hoặc chỉ đơn giản là npm. Ví dụ thay vì phải gõ trên console node index.js ta có thể gõ npm start. Npm sẽ tìm shortcut có tên start trong file config và chạy lệnh node index.js.

3. Hoàn thiện và chạy thử

Trong file package.json ở trên có nhắc đến file index.js, đây là file chạy chính của chúng ta, nơi khởi tạo server và lắng nghe các request (thường gọi là entry file). Tạo file index.js với nội dung sau :

"use strict";const restify = require('restify');function respond(req, res, next) {
res.send('hello ' + req.params.name);
next();
}
var server = restify.createServer();server.get('/', function(req, res, next) {
res.send('This is our service!');
});
server.get('/hello/:name', respond);server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});

Khởi động server:

$ npm start
restify listening at http://[::]:8080

và gõ lên trình duyệt http://localhost:8080 sẽ thấy dòng chữ This is our service!.

Để ý cách tạo một route :

server.get('/', function(req, res, next) {
res.send('This is our service!');
});

.get mang ý nghĩa là method GET. Tham số đầu tiên sẽ là url, / mang ý nghĩa url gốc (http://localhost:8080). Tham số thứ hai là một callback với 3 tham số con

  • req: request gửi lên từ client, các thông tin chứa trong mỗi request có thể tham khảo ở đây
  • res: respond gửi trả lại client, các method của response có thể tham khảo ở đây
  • next: là hàm cần phải gọi để hoặc thông báo request đã được xử lý xong, hoặc trả về lỗi nếu có. Nếu hàm next không được gọi thì request tiếp theo sẽ không được xử lý.

Để ý cách tạo route thứ hai:

function respond(req, res, next) {
res.send('hello ' + req.params.name);
next();
}
server.get('/hello/:name', respond);

Tham số url /hello/:name có một thành phần đặc biệt :name. Url này sẽ khớp tất cả url có dạng bắt đầu bởi ‘/hello’, ví dụ : /hello/giang, /hello/coffee, /hello/restify … Các giá trị name (giang, coffee hay restify …) có thể được lấy qua property req.params.name. Nếu url của chúng ta có dạng /hello/:world thì req.params.name sẽ mang giá trị world. Để thay đổi cổng lắng nghe ta có thể thay 8080 bằng một giá trị khác, ví dụ 3000.

Ở phần tiếp theo mình sẽ hướng dẫn các bạn tạo service quản lý danh sách công việc sử dụng MongoDb !

Source code phần này được để ở đây