Rest API đơn giản với Restify (phần 1)

0
26
views
rest api

Rest API là gì?

Rest Api là một tập các quy tắc hướng dẫn các develop thiết kế web service. Chính xác là nó dành cho web services. 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 để liên hệ giữa các tiến trình 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. Lí do vì vẫn chỉ là Javascript bạn có thể làm cả Backend và Frontend cùng một lúc.

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ó. Một điều đặc biệt 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 (vi hoặc :

{
  "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"
  }
}

hoặc bạn có thể dùng lệnh npm init và trả lời các câu hỏi của nó để 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ấy phiên bản 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 mới nhất của vesion 7.2, ví dụ: 7.2.4, 7.2.8 …
  • scripts: định nghĩa các câu lệnh có thể chạy bằng lệnh npm run hoặc chỉ đơn giản là npm. Ví dụ để chạy file chính node index.js ta có thể gõ lệnh npm start

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ì các giá trị có thể lấy qua property req.params.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

BÌNH LUẬN

Please enter your comment!
Please enter your name here