Cách cài đặt và sử dụng BaasBox trên Ubuntu 14.04
BaasBox là một ứng dụng hoạt động như một server database và server ứng dụng kết hợp. Ngoài ra, BaasBox cung cấp tính năng đăng ký user , quản lý user , quản lý role , quản lý nội dung, quản lý file và quản lý database với các bản backup . Vì tất cả chức năng này được hiển thị thông qua API REST HTTP tiêu chuẩn, các nhà phát triển ứng dụng web và thiết bị di động có thể sử dụng BaasBox làm back-end để lưu trữ dữ liệu. Các nhà phát triển cũng có thể tạo các dịch vụ vi mô dựa trên BaasBox được sử dụng bởi các phần khác trong ứng dụng của họ.Bài viết này sẽ hướng dẫn bạn cách cài đặt BaasBox, tạo user , làm việc với console quản trị và khám phá API REST khi bạn tạo một chương trình backend ứng dụng đơn giản.
Yêu cầu
- Bạn có một Server chạy Ubuntu 14.04
- Bạn đã đăng nhập vào server của bạn với quyền là user không phải root với các quyền quản trị. Xem hướng dẫn Hướng dẫn cài đặt server ban đầu cho Ubuntu 14.04 để cài đặt điều này.
- Bạn đã cài đặt Java 8 JRE chính thức từ Oracle. Hướng dẫn này giải thích cách làm điều đó.
Bước 1 - Cài đặt và chạy BaasBox
 Để cài đặt BaasBox,  ta   download  version  ổn định mới nhất của BaasBox từ trang web chính thức. Bạn có thể thực hiện việc này bằng lệnh wget như sau:
- wget http://www.baasbox.com/download/baasbox-stable.zip 
 Ta  sẽ sử dụng lệnh unzip để  extract  BaasBox từ file  zip đã  download . Trong trường hợp bạn không có unzip , hãy cài đặt nó bằng lệnh sau:
- sudo apt-get install unzip 
Bây giờ extract nội dung của file zip:
- unzip baasbox-stable.zip 
Lệnh này   extract   nội dung của file  zip vào một folder  có tên là baasbox- XYZ , trong đó XYZ sẽ là version  mới nhất, chẳng hạn như 0.9.5 . Nhập folder  mới tạo.
- cd baasbox-X.Y.Z 
Thư mục này chứa một file  có tên start cần được thực thi để khởi động BaasBox. Để làm được điều đó, trước tiên  ta  cần đặt nó thành file  thực thi bằng lệnh sau:
- chmod +x ./start 
Sau đó, để khởi động BaasBox, hãy thực hiện lệnh sau:
- ./start 
Bạn sẽ thấy một số kết quả , phần cuối của nó sẽ giống như sau:
Output2016-06-28 14:32:14,554 - [info] - BaasBox is Ready. 2016-06-28 14:32:14,558 - [info] - Application started (Prod) 2016-06-28 14:32:14,733 - [info] - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 2016-06-28 14:32:15,261 - [info] - Session Cleaner: started 2016-06-28 14:32:15,263 - [info] - Session cleaner: tokens: 0 - removed: 0 2016-06-28 14:32:15,263 - [info] - Session cleaner: finished Phần được đánh dấu trong  kết quả  ở trên cho biết BaasBox hiện đang chạy và có thể được truy cập trên cổng 9000 trên máy. Cấu hình BaasBox mặc định lắng nghe trên cổng này trên tất cả các  network interface .  Nghĩa là  BaasBox hiện có thể truy cập tại:
-  http://localhost:9000vàhttp://127.0.0.1:9000từ server được cài đặt trên đó (hoặc qua tunnel SSH)
-  http:// your_internal_server_ip :9000từ mạng nội bộ mà server của bạn đang bật (nếu nó nằm trong mạng nội bộ)
-  http:// your_ip_address :9000từ internet nếuyour_ip_addresslà địa chỉ IP có thể truy cập .
Bạn có thể yêu cầu BaasBox lắng nghe trên một network interface cụ thể và trên một cổng khác, nếu được yêu cầu. Để thực hiện việc này, hãy sử dụng lệnh sau:
- ./start -Dhttp.port=target_port -Dhttp.address=target_interface 
Truy cập http:// your_ip_address :9000/console trong trình duyệt của bạn để truy cập console  quản trị BaasBox và bạn sẽ thấy giao diện giống như hình sau: 
Khi BaasBox đang chạy, hãy cài đặt một ứng dụng và một số user .
Bước 2 - Tạo ứng dụng với BaasBox
Trong bài viết này, ta sẽ tạo một Trình quản lý danh sách Todo đơn giản sẽ:
- Cho phép user đăng ký
- Cho phép user đăng nhập
- Cho phép user tạo nhiều danh sách việc cần làm
- Cho phép user truy xuất danh sách việc cần làm của riêng họ
- Cho phép user sửa đổi danh sách việc cần làm của họ
- Cho phép user xóa danh sách việc cần làm của họ
- Cho phép user chia sẻ danh sách việc cần làm của họ với user khác
Trong khi làm theo, vui lòng lưu ý những điều sau:
-   Ta  sẽ tạo hai  user  với tên  user  là user1vàuser2
-  Mật khẩu của những  user  này sẽ được gọi là user1_passwordvàuser2_password
-  ID phiên của những  user  này sẽ được gọi là user1_session_idvàuser2_session_id.
 Mặc dù bạn có thể quản lý BaasBox thông qua API REST, nhưng đôi khi sẽ thuận tiện hơn khi sử dụng console  dành cho  administrator , như bạn đã thấy ở Bước 2, tại http:// your_ip_address :9000/console . Truy cập liên kết đó trong trình duyệt của bạn. Vì đây là lần đầu tiên bạn sử dụng nó, hãy đăng nhập bằng thông tin đăng nhập mặc định:
-  Tên  user  mặc định: admin
-  Mật khẩu mặc định: admin
-  Mã ứng dụng mặc định: 1234567890
Sau khi đăng nhập, bạn sẽ thấy console BaasBox:
Hãy sử dụng console dành cho administrator để tạo user cho ứng dụng của ta .
Bước 3 - Tạo user
 Quản lý  user  là một trong những tính năng hữu ích nhất của BaasBox. BaasBox có một số  user  cài sẵn là riêng tư và không thể chỉnh sửa. Điều này bao gồm  user  admin mà bạn sử dụng khi đăng nhập vào console  dành cho  administrator .
BaasBox cũng cho phép bạn xác định các role và gán chúng cho user để thực hiện kiểm soát truy cập chi tiết. Theo mặc định, BaasBox có 3 role sau:
-  administrator- role này có quyền truy cập hoàn chỉnh, không hạn chế
-  backoffice- role này cấp quyền truy cập vào nội dung do user đã đăng ký tạo
-  registered- đây là role mặc định đối với user mới đăng ký
 Bạn có thể thêm các  role  của riêng mình ngoài những  role  được  cấu hình  sẵn này. Khi một  role  mới được tạo, nó có các quyền tương tự như  role  registered được đề cập ở trên.
Bạn có thể tạo user trong BaasBox thông qua console dành cho administrator hoặc thông qua REST API. Thông thường, bạn sẽ sử dụng REST API để tạo user theo chương trình, chẳng hạn như thông qua quy trình đăng ký user ứng dụng của bạn.
 Khi thêm  user  thông qua console  dành cho  administrator , bạn có thể đặt  role  tùy chỉnh cho họ. Tuy nhiên, khi sử dụng API REST tích hợp để đăng ký, những  user  mới được tạo sẽ được gán  role  registered .
Để tạo user mới từ console dành cho administrator của BaasBox, hãy mở menu NGƯỜI DÙNG> User trong console dành cho administrator và nhấp vào nút User mới .
Thao tác này sẽ mở ra một biểu mẫu nơi bạn có thể điền vào thông tin chi tiết của user mà bạn đang tạo:
Các trường Tên user , Mật khẩu , Nhập lại Mật khẩu và Role là bắt buộc trong khi mọi trường khác là tùy chọn. Lưu ý bạn có thể cuộn xuống trong biểu mẫu này để điền thêm thông tin chi tiết nếu bạn cần.
Đặt tên  user  cho  user  này thành user1 . Bạn có thể chọn bất kỳ  role  nào nhưng  role  thường được sử dụng nhất đã được registered . Khi bạn đã nhập tất cả các chi tiết, hãy nhấp vào nút Lưu thay đổi để hoàn tất quá trình tạo  user .
Ta sẽ tạo user bằng API REST trong phần tiếp theo. Bây giờ, hãy cấu hình một nơi cho nội dung ứng dụng của ta .
Bước 4 - Tạo Bộ sưu tập
 BaasBox sắp xếp nội dung của bạn thành các collections tương tự như các bộ sưu tập được cung cấp bởi database  NoSQL như MongoDB. Bộ sưu tập lưu giữ các documents cùng loại.  User  quen thuộc với database  SQL có thể coi một collection gần giống như một table . Tương tự, một document giống như một record .
Bộ sưu tập chỉ có thể được tạo bởi administrator . Mặc dù cách phổ biến nhất để tạo bộ sưu tập là từ console dành cho administrator , nhưng bạn cũng có thể thực hiện bằng cách sử dụng API REST. Trong phần này, ta sẽ xem xét cách tạo bộ sưu tập từ console dành cho administrator .
 Tất cả chức năng quản lý nội dung đều có sẵn trong console  dành cho  administrator  trong menu Collections và Documents trong phần DATA .
Mở menu DỮ LIỆU> Bộ sưu tập . Bạn sẽ thấy một trang liệt kê tất cả các bộ sưu tập hiện tại trong ứng dụng của bạn .
Để tạo bộ sưu tập mới, hãy nhấp vào nút Bộ sưu tập mới . Điều này sẽ hiển thị một biểu mẫu nhắc bạn về tên bộ sưu tập.
 Nhập todos như tên của bộ sưu tập và nhấp vào Lưu thay đổi để hoàn tất quá trình tạo ra bộ sưu tập.  User  của ứng dụng hiện có thể truy cập bộ sưu tập này và các tài liệu của họ trong bộ sưu tập này bằng API REST. Hãy xem nó hoạt động như thế nào.
Bước 5 - Sử dụng API REST
Bây giờ ta đã biết cách sử dụng console quản trị để thực hiện các việc khác nhau, hãy cùng xem cách thực hiện các việc tương tự bằng cách sử dụng API REST của BaasBox.
 API REST  được dùng  bởi nhiều loại ứng dụng khác nhau từ ứng dụng web và ứng dụng di động đến ứng dụng console ,  ta  sẽ sử dụng curl để mô phỏng các yêu cầu trong các ví dụ sau. Bạn có thể điều chỉnh các ví dụ này theo nhu cầu  của bạn  tùy thuộc vào nền tảng front-end của bạn.
Tạo user bằng API REST
 Định dạng chung của lệnh curl được sử dụng để tạo  user  như sau:
- curl http://your_ip_address:9000/user \ 
-     -d '{"username" : "username", "password" : "password"}' \ 
-     -H Content-type:application/json \ 
-     -H X-BAASBOX-APPCODE:baasbox_appcode 
Trong trường hợp của  ta ,  ta  sẽ tạo một  user  với tên  user  user2 . Chọn bất kỳ password  nào bạn thích.  Ta  sẽ sử dụng giá trị mặc định cho tiêu đề X-BAASBOX-APPCODE là 1234567890 . Sử dụng các giá trị này, lệnh của  ta  sẽ trở thành:
- curl http://your_ip_address:9000/user \ 
-     -d '{"username" : "user2", "password" : "user2_password"}' \ 
-     -H Content-type:application/json \ 
-     -H X-BAASBOX-APPCODE:1234567890 
Đầu ra của việc thực thi lệnh này phải tương tự như:
Output{"result":"ok","data":{"user":{"name":"user2","status":"ACTIVE","roles":[{"name":"registered","isrole":true}]},"id":"a4353548-501a-4c55-8acd-989590b2393c","visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByFriends":{},"visibleByRegisteredUsers":{"_social":{}},"signUpDate":"2016-04-05T13:12:17.452-0400","generated_username":false,"X-BB-SESSION":"992330a3-4e2c-450c-8d83-8eaf2903188b"},"http_code":201} Đây là version được định dạng của kết quả ở trên:
Output{   "result": "ok",   "data": {     "user": {       "name": "user2",       "status": "ACTIVE",       "roles": [         {           "name": "registered",           "isrole": true         }       ]     },     "id": "a4353548-501a-4c55-8acd-989590b2393c",     "visibleByAnonymousUsers": {},     "visibleByTheUser": {},     "visibleByFriends": {},     "visibleByRegisteredUsers": {       "_social": {}     },     "signUpDate": "2016-04-05T13:12:17.452-0400",     "generated_username": false,     "X-BB-SESSION": "992330a3-4e2c-450c-8d83-8eaf2903188b"   },   "http_code": 201 } Lưu ý các giá trị được đánh dấu trong  kết quả  ở trên. BaasBox tạo một id duy nhất cho mọi  user . Bạn sẽ sử dụng ID này khi muốn tìm nạp, sửa đổi hoặc xóa tài liệu của  user  cụ thể này qua API REST.
 Giá trị được đánh dấu thứ hai là X-BB-SESSION , là ID phiên cần có trong tất cả các truy vấn trong tương lai mà user2 sẽ thực hiện.  Ta  sẽ gọi giá trị này là user2_session_id trong các phần tiếp theo.
Đăng nhập user bằng API REST
 Bây giờ  ta  đã có id phiên cho user2 , hãy lấy một id cho user1 ,  user  mà  ta  đã tạo trước đó trong console  quản trị.  Ta  sẽ thực hiện việc này bằng cách đăng nhập  với quyền  user1 bằng API REST. Định dạng chung của lệnh curl được sử dụng để đăng nhập là:
- curl http://your_ip_address:9000/login \ 
-     -d "username=username" \ 
-     -d "password=password" \ 
-     -d "appcode=baasbox_appcode" 
Trong trường hợp của  ta , tên  user  là user1 , password  là bất cứ thứ gì được sử dụng trong khi tạo user1 và Mã ứng dụng BaasBox là 1234567890 . Sử dụng các giá trị này, lệnh của  ta  sẽ trở thành:
- curl http://your_ip_address:9000/login \ 
-     -d "username=user1" \ 
-     -d "password=user1_password" \ 
-     -d "appcode=1234567890" 
Đầu ra của việc thực thi lệnh này phải tương tự như:
Output{"result":"ok","data":{"user":{"name":"user1","status":"ACTIVE","roles":[{"name":"registered","isrole":true}]},"id":"84191e4c-2471-48a7-98bb-ecdaf118285c","visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByFriends":{},"visibleByRegisteredUsers":{"_social":{}},"signUpDate":"2016-04-05T13:06:35.750-0400","generated_username":false,"X-BB-SESSION":"74400b4b-d16c-45a2-ada3-1cd51cc202bb"},"http_code":200} Đây là version được định dạng của kết quả ở trên:
Output{   "result": "ok",   "data": {     "user": {       "name": "user1",       "status": "ACTIVE",       "roles": [         {           "name": "registered",           "isrole": true         }       ]     },     "id": "84191e4c-2471-48a7-98bb-ecdaf118285c",     "visibleByAnonymousUsers": {},     "visibleByTheUser": {},     "visibleByFriends": {},     "visibleByRegisteredUsers": {}     },     "signUpDate": "2016-04-05T13:06:35.750-0400",     "generated_username": false,     "X-BB-SESSION": "74400b4b-d16c-45a2-ada3-1cd51cc202bb"   },   "http_code": 200 } Phần được đánh dấu của phản hồi ở trên hiển thị ID phiên cho user1 mà  ta  cần sử dụng trong tất cả các truy vấn trong tương lai mà user1 sẽ thực hiện.  Ta  sẽ gọi giá trị này là user1_session_id kể từ bây giờ.
Tạo tài liệu bằng API REST
 Hãy tạo hai tài liệu trong ứng dụng của  ta .  Ta  sẽ chỉ định một tài liệu cho user1 ,  user  mà  ta  đã tạo bằng console  dành cho  administrator  và  ta  sẽ chỉ định tài liệu khác cho user2 ,  user  mà  ta  đã tạo thông qua REST API. Cấu trúc của các tài liệu  ta  sẽ tạo sẽ giống như ví dụ sau:
Sample Document Contents{   "list_name": "Task List Name",   "tasks": [     {       "task": "Task Details",       "done": false     },     {       "task": "Task Details",       "done": false     }   ] } Nhìn vào cấu trúc, ta có thể thấy rằng một tài liệu sẽ có hai thuộc tính. Một là tên của danh sách nhiệm vụ và một là danh sách các nhiệm vụ trong danh sách đó.
 Định dạng chung của lệnh curl được sử dụng để tạo tài liệu mới là:
- curl -X POST http://your_ip_address:9000/document/collection_name \ 
-      -d 'json_formatted_document' \ 
-      -H Content-type:application/json \ 
-      -H X-BB-SESSION:session_id 
Hãy bắt đầu bằng cách tạo một tài liệu cho user1 . Trong trường hợp của  ta , tên của bộ sưu tập là todos và tài liệu  ta  muốn chèn trông giống như sau:
Document Contents{   "list_name": "User 1 - List 1",   "tasks": [     {       "task": "User1 List1 task 1",       "done": false     },     {       "task": "User1 List1 task 2",       "done": false     }   ] } Để đảm bảo tài liệu được liên kết với user1 ,  ta  sử dụng ID phiên của user1 mà  ta  có được khi đăng nhập  user  đó vào hệ thống của  ta .
 Nhập lệnh sau để tạo tài liệu cho user1 :
- curl -X POST http://your_ip_address:9000/document/todos \ 
-      -d '{"list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}]}' \ 
-      -H Content-type:application/json \ 
-      -H X-BB-SESSION:user1_session_id 
Việc thực thi lệnh này dẫn đến kết quả tương tự như sau:
Output{"result":"ok","data":{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200} Đây là version được định dạng của kết quả ở trên:
Output{   "result": "ok",   "data": {     "@rid": "#24:1",     "@version": 2,     "@class": "todos",     "list_name": "User 1 - List 1",     "tasks": [       {         "task": "User1 List1 task 1",         "done": false       },       {         "task": "User1 List1 task 2",         "done": false       }     ],     "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",     "_creation_date": "2016-04-05T20:34:30.132-0400",     "_author": "user1"   },   "http_code": 200 } Giống như nó đã làm cho  user  mới, BaasBox tạo một id , được đánh dấu trong ví dụ trước, cho tất cả các tài liệu mới. Hãy ghi lại id này vì  ta  sẽ sử dụng nó sau này khi cấp cho user2 quyền truy cập vào danh sách này. Trong các phần tiếp theo,  ta  sẽ đề cập đến id của tài liệu này là user1_list1_id .
Bây giờ, của bạn , sử dụng cùng một phương pháp để làm như sau:
-  Tạo một danh sách khác cho user1
-  Tạo hai danh sách cho user2
 Sau khi hoàn thành các bước này, bạn sẽ có tổng cộng 4 tài liệu trong todos bộ sưu tập. Trong các phần tiếp theo,  ta  sẽ đề cập đến ID của các tài liệu này là:
- id user1 list1
- id user1 list2
- id user2 list1
- id user2 list2
Bây giờ ta có một số dữ liệu có thể sử dụng để có thể điều tra cách ta truy vấn dữ liệu bằng API REST.
Lấy một tài liệu duy nhất bằng API REST
 Định dạng chung của lệnh curl được sử dụng để tìm nạp tài liệu theo id của nó là:
- curl http://your_ip_address:9000/document/collection_name/document_id \ 
-      -H X-BB-SESSION:session_id 
Nếu  ta  muốn tìm nạp tài liệu đầu tiên được tạo bởi user1 (với thông tin đăng nhập của user1 ), lệnh phải là:
- curl http://your_ip_address:9000/document/todos/user1_list1_id \ 
-      -H X-BB-SESSION:user1_session_id 
Thực hiện lệnh này cho ta một kết quả tương tự như sau:
Output{"result":"ok","data":{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200} Đây là version được định dạng của phản hồi:
Output{   "result": "ok",   "data": {     "@rid": "#24:1",     "@version": 2,     "@class": "todos",     "list_name": "User 1 - List 1",     "tasks": [       {         "task": "User1 List1 task 1",         "done": false       },       {         "task": "User1 List1 task 2",         "done": false       }     ],     "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",     "_creation_date": "2016-04-05T20:34:30.132-0400",     "_author": "user1"   },   "http_code": 200 }  Đến đây bạn  đã biết cách truy xuất một tài liệu, hãy thử làm lại điều tương tự, ngoại trừ lần này tìm nạp tài liệu bằng id phiên của user2 :
- curl -X POST http://your_ip_address:9000/document/todos/user1_list1_id \ 
-      -H X-BB-SESSION:user2_session_id 
Thực hiện lệnh này sẽ hiển thị một kết quả tương tự như sau:
Output{"result":"error","message":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f not found","resource":"/document/todos/c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","method":"GET","request_header":{"Accept":["*/*"],"Host":["localhost:9000"],"User-Agent":["curl/7.35.0"],"X-BB-SESSION":["8f5a2e48-0f42-4478-bd1b-d28699158c4b"]},"API_version":"0.9.5","http_code":404} Đây là cùng một kết quả , được định dạng để dễ đọc:
Output{   "result": "error",   "message": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f not found",   "resource": "\/document\/todos\/c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",   "method": "GET",   "request_header": {     "Accept": [       "*\/*"     ],     "Host": [       "localhost:9000"     ],     "User-Agent": [       "curl\/7.35.0"     ],     "X-BB-SESSION": [       "8f5a2e48-0f42-4478-bd1b-d28699158c4b"     ]   },   "API_version": "0.9.5",   "http_code": 404 }  Như bạn thấy , vì user2 không tạo tài liệu này và không có quyền truy cập vào tài liệu này nên thao tác tìm nạp không thành công. Nếu bạn cố gắng thực thi lệnh  với quyền  user2 nhưng với id của tài liệu do user2 tạo,  bạn có thể  tìm nạp tài liệu đó tốt.
Truy xuất tất cả tài liệu bằng API REST
 Định dạng chung của lệnh curl được sử dụng để tìm nạp tất cả các tài liệu có thể truy cập từ một bộ sưu tập là:
- curl http://your_ip_address:9000/document/collection_name \ 
-      -H X-BB-SESSION:session_id 
 Lưu ý  lệnh này sẽ chỉ trả về các tài liệu mà  user  có quyền truy cập. Ví dụ: hãy thử thực hiện lệnh này  với quyền  là user1 :
- curl http://your_ip_address:9000/document/todos \ 
-      -H X-BB-SESSION:user1_session_id 
Thực hiện lệnh này cho ta một kết quả tương tự như sau:
Output{"result":"ok","data":[{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},{"@rid":"#24:2","@version":1,"@class":"todos","list_name":"User 1 - List 2","tasks":[{"task":"User1 List2 task 1","done":false},{"task":"User1 List2 task 2","done":false}],"id":"7c99c877-d269-4281-8a22-ef72175085f4","_creation_date":"2016-04-05T20:46:14.338-0400","_author":"user1"}],"http_code":200} Đây là version được định dạng của kết quả đó:
Output{   "result": "ok",   "data": [     {       "@rid": "#24:1",       "@version": 2,       "@class": "todos",       "list_name": "User 1 - List 1",       "tasks": [         {           "task": "User1 List1 task 1",           "done": false         },         {           "task": "User1 List1 task 2",           "done": false         }       ],       "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",       "_creation_date": "2016-04-05T20:34:30.132-0400",       "_author": "user1"     },     {       "@rid": "#24:2",       "@version": 1,       "@class": "todos",       "list_name": "User 1 - List 2",       "tasks": [         {           "task": "User1 List2 task 1",           "done": false         },         {           "task": "User1 List2 task 2",           "done": false         }       ],       "id": "7c99c877-d269-4281-8a22-ef72175085f4",       "_creation_date": "2016-04-05T20:46:14.338-0400",       "_author": "user1"     }   ],   "http_code": 200 }  Như bạn thấy  từ  kết quả , chỉ những tài liệu mà user1 có quyền truy cập được trả về. Nếu bạn thực hiện cùng một truy vấn bằng cách sử dụng id phiên thuộc về user2 , bạn sẽ thấy một bộ tài liệu khác.
Cập nhật tài liệu bằng API REST
 Định dạng chung của lệnh curl được sử dụng để cập nhật tài liệu là:
- curl -X PUT http://your_ip_address:9000/document/collection_name/document_id \ 
-      -d 'new_json_formatted_document' \ 
-      -H Content-type:application/json \ 
-      -H X-BB-SESSION:session_id 
Có hai điều cần ghi nhớ khi cố gắng cập nhật tài liệu:
- Chỉ chủ sở hữu tài liệu mới có thể sửa đổi tài liệu
- Bản cập nhật không hợp nhất tài liệu cũ và tài liệu mới . Nó thay thế tài liệu cũ bằng tài liệu mới. Điều này nghĩa là nếu lệnh cập nhật bao gồm tài liệu có một số trường bị thiếu so với version root , các trường này sẽ bị mất.
 Hãy sử dụng lệnh này để cập nhật tài liệu có id user1_list1_id với nội dung sau:
New Document Contents{   "list_name": "User 1 - List 1 Updated",   "tasks": [     {       "task": "New User1 List1 task 1",       "done": false     }   ] } Lệnh để thực hiện cập nhật này là:
- curl -X PUT http://your_ip_address:9000/document/todos/user1_list1_id \ 
-      -d '{"list_name":"User 1 - List 1 Updated","tasks":[{"task":"New User1 List1 task 1","done":false}]}' \ 
-      -H Content-type:application/json \ 
-      -H X-BB-SESSION:user1_session_id 
Thực hiện lệnh này cho ta một kết quả tương tự như sau:
Output{"result":"ok","data":{"@rid":"#24:1","@version":4,"@class":"todos","list_name":"User 1 - List 1 Updated","tasks":[{"task":"New User1 List1 task 1","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200} Đây là cùng một kết quả , được định dạng:
Output{   "result": "ok",   "data": {     "@rid": "#24:1",     "@version": 4,     "@class": "todos",     "list_name": "User 1 - List 1 Updated",     "tasks": [       {         "task": "New User1 List1 task 1",         "done": false       }     ],     "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f",     "_creation_date": "2016-04-05T20:34:30.132-0400",     "_author": "user1"   },   "http_code": 200 } Như bạn thấy, tài liệu đã được cập nhật thông tin mới.
Xóa tài liệu bằng API REST
 Định dạng chung của lệnh curl được sử dụng để xóa tài liệu là:
- curl -X DELETE http://your_ip_address:9000/document/collection_name/document_id \ 
-      -H X-BB-SESSION:session_id 
Chỉ chủ sở hữu tài liệu và  user  có quyền delete trên tài liệu mới có thể xóa tài liệu đó.
 Hãy sử dụng lệnh này để xóa tài liệu có id user1_list1_id như sau:
- curl -X DELETE http://your_ip_address:9000/document/todos/user1_list1_id \ 
-      -H X-BB-SESSION:user1_session_id 
Thực hiện lệnh này cho kết quả sau:
Output{"result":"ok","data":"","http_code":200} Điều này cho thấy rằng tài liệu đã được xóa thành công. Mọi nỗ lực trong tương lai để truy cập tài liệu này bằng id bây giờ sẽ không thành công.
Cấp quyền truy cập cho user khác bằng API REST
  Ta  đã thấy cách, theo mặc định, BaasBox ngăn  user  truy cập các tài liệu không do họ tạo. Tuy nhiên, đôi khi có yêu cầu cấp cho nhiều  user  quyền truy cập vào một tài liệu. Hãy cấp cho user2 quyền truy cập vào tài liệu với id user1_list1_id .
 Định dạng chung của lệnh curl được sử dụng để cấp quyền truy cập vào tài liệu là:
- curl -X PUT http://your_ip_address:9000/document/collection_name/document_id/access_type/user/username \ 
-      -H X-BB-SESSION:session_id 
Lệnh này sẽ chỉ hoạt động nếu nó được thực thi bởi  user  có toàn quyền truy cập vào tài liệu này. Trình giữ chỗ access_type có thể có một trong 4 giá trị sau:
- đọc
- cập nhật
- xóa bỏ
- tất cả
 Để cấp quyền truy cập đọc user2 vào tài liệu có id user1_list1_id , hãy thực thi lệnh sau bằng id phiên của user1 :
- curl -X PUT http://your_ip_address:9000/document/todos/user1_list1_id/read/user/user2 \ 
-      -H X-BB-SESSION:user1_session_id 
Thực hiện lệnh này cho kết quả sau:
Output{"result":"ok","data":"","http_code":200} Điều này  cho biết  user2 hiện có quyền truy cập vào tài liệu user1_list1_id . Nếu bạn cố gắng truy cập tài liệu này  với quyền  là user2 , bây giờ bạn sẽ thấy chi tiết tài liệu thay vì phản hồi lỗi
Bước 6 - Sử dụng Trình giám sát để giữ cho ứng dụng chạy
Khi nào bạn có một ứng dụng đang chạy lâu, luôn có nguy cơ nó có thể ngừng chạy. Điều này có thể xảy ra do nhiều lý do như lỗi ứng dụng, khởi động lại hệ thống, v.v. Bạn nên cấu hình ứng dụng để khởi động lại trong trường hợp tắt đột ngột. Điều này giảm thiểu chi phí quản trị trong việc duy trì ứng dụng.
Đối với ứng dụng này, ta sẽ sử dụng Trình giám sát giúp dễ dàng quản lý các ứng dụng đang chạy lâu. Nếu bạn chưa quen với Supervisor, bạn có thể đọc thêm về cách cài đặt và quản lý Supervisor trên Ubuntu tại đây .
Đầu tiên, hãy cài đặt Supervisor:
- sudo apt-get install supervisor 
Để làm cho Người giám sát quản lý ứng dụng của  ta ,  ta  cần tạo một file  cấu hình.  Ta  sẽ đặt tên cho file  này là baasbox.conf và đặt nó trong folder  /etc/supervisor/conf.d .
- sudo nano /etc/supervisor/conf.d/baasbox.conf 
Nhập phần sau vào file , thay thế các phần được đánh dấu nếu thích hợp.
[program:Baasbox] directory = /home/sammy/baasbox-0.9.5 command = /home/sammy/baasbox-0.9.5/start autostart = true autorestart = true startsecs = 5 user = sammy stdout_logfile = /var/log/supervisor/baasbox.log Bây giờ ta cần thông báo cho Người giám sát về những thay đổi này và để Người giám sát sử dụng những thay đổi này. Thực hiện lệnh sau:
- supervisorctl reread 
Sau đó chạy lệnh này:
- supervisorctl update 
Như vậy, khi nào ứng dụng của bạn tắt vì bất kỳ lý do gì, Người giám sát sẽ đảm bảo ứng dụng khởi động lại mà không yêu cầu bất kỳ sự can thiệp thủ công nào.
Kết luận
Trong bài viết này, ta đã giới thiệu cho các bạn cách sử dụng BaasBox để quản lý nội dung, user và quyền bằng console dành cho administrator và sử dụng REST API. Có rất nhiều thứ khác mà BaasBox cung cấp ngoài các chủ đề được đề cập trong bài viết này. Bạn có thể khám phá thêm console quản trị BaasBox để làm quen với các phần cho phép bạn quản lý file , lấy và khôi phục các bản backup database và cấu hình tính khả dụng của các điểm cuối API. Quan trọng hơn, bây giờ bạn đã sẵn sàng để bắt đầu sử dụng BaasBox trong ứng dụng tiếp theo của bạn .
Các tin liên quan
Cách thiết lập notebook Jupyter để chạy IPython trên Ubuntu 16.042016-06-15
Cách cài đặt Go 1.6 trên Ubuntu 16.04
2016-05-19
Cách cài đặt và sử dụng Composer trên Ubuntu 16.04
2016-05-17
Cách tập trung log với Rsyslog, Logstash và Elasticsearch trên Ubuntu 14.04
2016-05-16
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 16.04
2016-05-04
Cách cài đặt và cấu hình VNC trên Ubuntu 16.04
2016-04-26
Cách cài đặt WordPress với LEMP trên Ubuntu 16.04
2016-04-25
Cách thêm không gian swap trên Ubuntu 16.04
2016-04-25
Cách cài đặt Java với Apt-Get trên Ubuntu 16.04
2016-04-23
Cách cài đặt WordPress với LAMP trên Ubuntu 16.04
2016-04-22
 

