Tạo Mock API với JSON Server    

  • Báo cáo

Bài đăng này đã không được update trong 2 nămTrong quy trình tăng trưởng app mobile đôi lúc server lăn đùng ra chết hoặc đường dây mạng trong công ty có yếu tố, bạn phải chờ cho đến khi hồi sinh được server hoặc đường truyền không thay đổi mới hoàn toàn có thể test và code tiếp. Quá tiêu tốn lãng phí thời hạn phải không ? Để xử lý yếu tố này thì tạo mock api chính là giải pháp giúp tất cả chúng ta tránh được việc nhờ vào vào response từ server trả về. Bài viết này sẽ trình làng về JSON Server giúp tất cả chúng ta tạo mock api một cách đơn thuần và nhanh gọn .

Cơ bản

Cài đặt json-server bằng câu lệnh sau
npm install -g json-server

Tạo một json database và đặt tên db.json như mẫu dưới đây:

Bạn đang đọc: Mock API là gì

{
  "users": [
    {
      "id": 1,
      "userId": 101,
      "name": "Alice"
    },
    {
      "id": 2,
      "userId": 102,
      "name": "Bob"
    },
    {
      "id": 3,
      "userId": 103,
      "name": "Carol"
    }
  ]
}

Khởi tạo server với database vừa tạo
json-server --watch db.json

Bạn đã hoàn toàn có thể request tới server theo link sau :

curl http://localhost:3000/users

Lệnh GET request sẽ trả về tài liệu đã tạo trong file json database. Ta hãy thêm mới tài liệu vào database bằng lệnh POST như sau :

curl -d "userId=104&name=Dan" http://localhost:3000/users

Custom Routes

Nếu bạn muốn tạo những route khác nhau hay tạo package.json như sau :

{
  "name": "json-server-test",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "devDependencies": {
    "json-server": "^0.14.0"
  }
}

và một server.js như sau :

const jsonServer = require('json-server');
const server = jsonServer.create();
const router = jsonServer.router('./db.json');
const middlewares = jsonServer.defaults();
const port = process.env.PORT || 3000;

server.use(middlewares);
server.use(router);
server.listen(port);

Với server.js ta sẽ tạo server, thiết lập database và router và sử dụng default middlewares .

Để lan rộng ra route ta cần thêm rewriter .

server.use(jsonServer.rewriter({
  '/api/users': '/users'
}));

POST Routes

Để tuỳ chỉnh route cho lệnh POST ta cần sử dụng bodyParser

server.use(jsonServer.bodyParser)

server.post('/post/user', (req, res) => {
  if (req.method === 'POST') {
    let userId = req.body['userId'];
    if (userId != null && userId >= 0) {
      let result = db.users.find(user => {
        return user.userId == userId;
      })

      if (result) {
        let {id, ...user} = result;
        res.status(200).jsonp(user);
      } else {
        res.status(400).jsonp({
          error: "Bad userId"
        });
      }
    } else {
      res.status(400).jsonp({
        error: "No valid userId"
      });
    }
  }
});

Như vậy, điểm khác biệt duy nhất ở đây đó là ta lấy body từ request thay vì query. Nếu bạn không sử dụng bodyParse thì phần body sẽ không được định nghĩa curl -d "userId=101" http://localhost:3000/post/user

Kết quả :

Tạo dữ liệu Fake

Phần tạo moke api đã xong, nhưng giả sử bạn cần rất nhiều tài liệu trong database hàng ngàn record ví dụ điển hình. Khi đó, việc tạo tài liệu thủ công bằng tay tỏ ra không hiệu suất cao. Faker sẽ giúp tất cả chúng ta xử lý yếu tố này Cài đặt Faker

npm install --save faker

Tạo và chạy một js như sau

var faker = require('faker');

function generateData () {
  var messages = [];
  for (var id = 0; id < 10; id++) {
    let priority = faker.random.number({min: 1, max: 2});
    let date = faker.date.between("2018-01-01", "2018-07-31").toISOString().split("T")[0];
    let fromId = faker.random.number({min: 1000, max: 9999})
    let message = faker.hacker.phrase();
    let status = faker.random.number(1);
    messages.push({
      "id": id,
      "from_userId": fromId,
      "date_sent": date,
      "priority": priority,
      "message": message,
      "status": status
    });
  }

  return {messages};
}

module.exports = generateData;

json-server generate-data.js

Kiểm tra tài liệu vưa tạo bằng lệnh GET

Hosting  JSON Server trên Heroku

Ngoài việc lưu server trên máy local bạn trọn vẹn hoàn toàn có thể đưa mock api server của mình lên Heroku https://www.heroku.com/ rất thuận tiện và không tính tiền bằng thông tin tài khoản cá thể

Reference

Bài viêt này được dịch từ https://spin.atomicobject.com/2018/10/08/mock-api-json-server/  

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *