# Setup hệ thống Api với Nodejs trong 1 nốt nhạc
nodejs
74
API
12
restful
13
keystone
1
White

Xaolonist viết ngày 21/05/2017

Setup hệ thống Api với Nodejs trong 1 nốt nhạc

Mục đích bài viết là sẽ giúp setup hệ thống api cơ bản, và cung cấp giao diện admin để thao tác với dữ liệu được dễ dàng hơn, bằng cách dùng Keystoneexpress-restify-mongoose.

Kết quả sẽ đại loại như vầy:
alt text

Mình có deloy 1 bản lên heroku các bạn có thể test thử.


Và đây là phần chính.

Mình là Xaolonist (tiếng việt là nhà Khoa học đường phố), mình tuổi dê, cung ma kết, yêu màu nâu và thích hòa bình. Đây là bài viết đầu tiên của mình nên hơi dài dòng xíu.

Thuở thiếu thời, động cái gì mình cũng muốn tự làm, mà lại bị mắc hội chứng hoàn hảo, nên riết chẳng xong được cái nào. Buồn quá bỏ, nhiều lúc nghĩ quẩn học xong sẽ về quê chăn rau nuôi gà hưởng cuộc sống an nhàn tự do tự tại.

alt text

Thế nhưng, đùng một cái giống như buồn ngủ lại gặp được chiếu manh. KeystoneJS ra đời, cứu cánh cho những fan cuồng js, và trong đó có mình. Và mình cũng hay dùng keystone để làm website cho mấy bé hàng xóm bên cạnh, mấy bé bán trái cây mà cũng đòi website đồ, làm xong mấy bé khen dữ lắm, còn cho mình vài cặp dưa lê để mình ăn cho mát ruột nữa.

Về express-restify-mongoose
Những api mặc định hố trợ khá phong phú, nó hầu như đáp ứng được hết các yêu cầu của mình:

  • Lấy danh sách, lấy từng phần tử
  • Population, pagination
  • Filter, search free text
  • ... xem thêm

Làm thế nào để expose api
Dưới đây là cách expose customer api với Express-restify-mongoose

const express = require('express')
const bodyParser = require('body-parser')
const methodOverride = require('method-override')
const mongoose = require('mongoose')
const restify = require('express-restify-mongoose')
const app = express()
const router = express.Router()

app.use(bodyParser.json())
app.use(methodOverride())

mongoose.connect('mongodb://localhost:27017/database')

restify.serve(router, mongoose.model('Customer', new mongoose.Schema({
  name: { type: String, required: true },
  comment: { type: String }
})))

app.use(router)

app.listen(3000, () => {
  console.log('Express server listening on port 3000')
})

Như vậy Express-restify-mongoose sẽ nhận vào là 1 model của mongoose. Sau quá trình tìm hiểu thì mình thấy rằng thằng keystone nó giấu các định nghĩa model của mongose ở đây keystone.mongoose.model('XXX')

Thế là với vài câu lệnh setup đơn giản mình đã có một hệ thống api cơ bản khá đủ dùng.

restify.serve(router, keystone.mongoose.model('User'));
restify.serve(router, keystone.mongoose.model('Post'));
restify.serve(router, keystone.mongoose.model('PostCategory'), {
name: 'category'
});

xem thêm

Thử gọi một request để đăng 1 blog lên xem nào, muốn rõ ràng thì thử thay đổi vài thông tin nhé. Có thể request sẽ hơi chậm, vì dùng hàng free nên nó hay ngủ lắm, phải đợi 1 chặp nó mới dậy :3

curl -X POST \
  http://keystone-restful.herokuapp.com/api/v1/post \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
        "title":"demo 01",
        "content":{
          "brief":"Dolore non laboris elit elit exercitation enim occaecat officia."
        }
      }' 

và sau đó truy cập vào đây để xem kết quả: http://keystone-restful.herokuapp.com/api/v1/post

Bạn hoàn toàn có thể thêm những custom api của mình khi dùng với Express-restful-mongoose.

Cái này tốn khá nhiều ram (cần ít làm 1 GB Ram để install), nhưng mình chả có gì ngoài điều kiện nên mình cũng chả để tâm lắm.

Bạn có thể tự setup hệ thống api của mình, hoặc clone từ repo này với 1 nốt nhạc https://github.com/tampham47/keystone-restful

Đừng quên comment hay thả tim để mình có động lực viết tiếp nhé.

Xin cảm ơn!
D. Xaolonist

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Xaolonist

1 bài viết.
1 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
21 3
Giao diện lập trình ứng dụng, còn gọi là API (Application Programming Interface) là chương trình cho phép người dùng sử dụng các phương thức của mộ...
chuong2v viết hơn 3 năm trước
21 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
1 bài viết.
1 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!