2013-07-28 25 views
8

Có lẽ câu hỏi của tôi nên được đặt lại là: làm thế nào để tôi tái cấu trúc những hành vi đó vào CRUD, đó là những gì Firebase vượt trội?Tôi làm cách nào để sử dụng Firebase để xử lý các tính toán phía máy chủ tự động?

Tôi nhận được rằng CRUD hoạt động tốt. Tôi cũng thấy cách mô hình bảo mật tuyên bố Firebase cho phép tôi đảm bảo an toàn cho phía máy chủ bảo mật, nơi nó sẽ tồn tại.

Giả sử tôi có dịch vụ đăng ký. Mỗi lần một người đăng ký dịch vụ, họ cần phải tự động có một mục hàng "do" được thêm vào tài khoản của họ. Trong thuật ngữ đơn giản:

/users/john 
/services/goodstuff 

Vì vậy john có thể đăng ký goodstuff, tôi có thể cho anh ta trong vòng 30 ngày mà không phải trả, nhưng sẽ nhắc nhở anh ấy khi 30 ngày là lên, "hey, bạn cần phải trả hoặc nếu không bạn mất đăng ký của bạn để làm tốt. "

Với một máy chủ back-end, tôi sẽ POST-/services/goodstuff/members, ví dụ, có một phần của handler POST thêm chi tiết đơn hàng "bạn nợ" vào tài khoản john 's, đảm bảo rằng không ai có thể tham gia goodstuff mà không bị đánh dấu là do.

Trong ứng dụng BaaS Firebase, nơi mà các logic bên máy chủ không tồn tại, tôi sẽ tái cấu trúc ứng dụng để có được hành vi có hiệu quả như thế nào?

Trả lời

6

Cập nhật (10 tháng 3 năm 2017): Trong khi kiến ​​trúc tôi phác thảo dưới đây vẫn còn hiệu lực và có thể được sử dụng để kết hợp căn cứ hỏa lực với bất kỳ cơ sở hạ tầng hiện có, căn cứ hỏa lực vừa phát hành Cloud Functions for Firebase, cho phép bạn chạy các chức năng Javascript trên Google của máy chủ để đáp ứng với các sự kiện Firebase (chẳng hạn như thay đổi cơ sở dữ liệu, người dùng đăng nhập và hơn thế nữa).

Một giải pháp tiềm năng (chưa được kiểm tra, xin lỗi; nhưng nó phải là ý tưởng đúng):

{ 
    "rules": { 
    "users": { 
     "$user": { 
     /* When they create their user record, they must write a 'due' that's 
     * within the next 30 days. */ 
     ".write": "!data.exists() && newData.child('due').isNumber() && newData.child('due').val() < now + (30*24*60*60*1000)" 
     } 
    }, 
    "services": 
     "$service": { 
     /* Must be authenticated and due date must not be passed. */ 
     ".read": "auth != null && now < root.child('users/' + auth.id + '/due).val()" 
     } 
    } 
    } 
} 

này sẽ đòi hỏi rằng khi ai đó đăng nhập vào lần đầu tiên và khởi người dùng của họ/nhập cảnh, họ d phải viết ngày hết hạn trong 30 ngày tới. Và sau đó khi truy cập vào bất kỳ dịch vụ nào, ngày đến hạn đó sẽ được xác minh là chưa được thông qua.

Điều đó nói rằng, một tùy chọn khác là chỉ cần quay lên một dịch vụ phụ trợ nhỏ để xử lý loại logic nghiệp vụ này. Firebase vượt trội trong việc bảo vệ, lưu trữ và đồng bộ hóa dữ liệu. Nhưng nếu bạn có logic kinh doanh phức tạp, bạn có thể muốn suy nghĩ về việc quay lên một quy trình phụ trợ nhỏ. Firebase có REST api cũng như Node.JSJVM khách hàng, do đó, thật dễ dàng để chạy mã phụ trợ của riêng bạn tích hợp với Firebase.

+1

Ồ, rất thanh lịch. Thay vì có máy chủ tính toán những gì nên được thêm vào và thêm nó, bạn đang nói, "để cho khách hàng tính toán nó, nhưng thực thi rằng nó chỉ có thể có một câu trả lời." Điều này thực sự khá thanh lịch, tôi thích nó. – deitch

+0

Cá nhân, tôi sẽ không đặt số '30 * 24 * 60 * 60 * 1000' vào các quy tắc bảo mật, thay vì trừu tượng nó như là một phần của dữ liệu được truy xuất qua thư mục gốc, nhưng điều này thực sự tốt đẹp. – deitch

Các vấn đề liên quan