2013-05-16 36 views
6

Công ty của tôi sắp thiết kế lại một dự án lớn từ đầu. Chúng tôi hiện đang suy nghĩ về cách triển khai nhà cung cấp dữ liệu. Tôi đã sử dụng để tích hợp một số dịch vụ web trong vài tháng qua và khá giống như xử lý dữ liệu theo cách này. Vì vậy, tôi đã suy nghĩ về một thiết kế RESTful. Chúng tôi sẽ sử dụng ColdFusion 10 đi kèm với hỗ trợ REST, nhưng tôi thực sự không thích cấu trúc thành phần cần thiết cho nó.Trang web dựa trên REST trong ColdFusion

Lợi thế lớn nhất có lẽ là chúng tôi sẽ có thể sử dụng REST để cung cấp dữ liệu cho tất cả nền tảng của chúng tôi, đó là: trang web, trang web trên thiết bị di động và ứng dụng iOS/Android. Cách tiếp cận bảo mật của tôi sẽ như sau: Dữ liệu công khai có thể được truy cập bởi bất kỳ ai (rõ ràng). Chỉ có thể truy cập dữ liệu riêng tư bằng BasicAuth. Sử dụng BasicAuth cũng cho phép chúng tôi có vai trò người dùng với các cấp truy cập khác nhau. Việc ủy ​​quyền sẽ được ngầm định và dựa trên phiên/đăng nhập.

<!--- server-side example to request customer information (private data, BasicAuth required) ---> 
<cfset requestedID = 123> 
<cfhttp url="/customer/#requestedID#" method="get" username="#APPLICATION.REST_SYSTEMUSER#" password="#APPLICATION.REST_SYSTEMUSER_PW#"> 
    <cfhttpparam type="url" name="includeAddresses" value="true"> 
</cfhttp> 

<!--- successful response in JSON ---> 
{ 
    "ID": 123, 
    "FirstName": "John", 
    "LastName": "Doe", 
    "Birthday": "1970-01-01", 
    "BillingAddress": { 
     "Receiver": "John Doe", 
     "Street": { 
      "Name": "Main Street", 
      "Number": "13", 
      "Addition": "" 
     } 
     "City": { 
      "ZipCode": "AB-123", 
      "Name": "Sampletown", 
      "District": "" 
     } 
    }, 
    "ShippingAddresses": [ 
    ] 
} 

<!--- deserialize JSON and build an object to use server-side (the constructor wraps the data and adds functions to it) ---> 
<cfset customerJSON = deserializeJSON(CFHTTP.FileContent)> 
<cfset customer = createObject("component", "Customer").init(customerJSON)> 

Sau đây là các câu hỏi mà đến tâm trí của tôi:

  1. Có thông minh để sử dụng phương pháp này REST của chung của tất cả mọi thứ trên mỗi trang duy nhất? (Sử dụng REST trên các trang web có bắt đầu không?)
  2. Yêu cầu HTTP cục bộ có ảnh hưởng đến hiệu suất và làm chậm trang tải không?
  3. BasicAuth có đủ để bảo vệ dữ liệu không? (Tôi chỉ cần thêm các tính năng bảo mật nhỏ, chẳng hạn như yêu cầu-spam vào bảo vệ)
  4. Tốt nhất là bạn nên tránh các phụ thuộc trong dịch vụ web như /customer/ để truy cập dữ liệu?

Trên một số trang web khác (cũ) chúng tôi có nhà cung cấp dữ liệu dựa trên tệp (bao gồm và các thành phần chăm sóc truy cập cơ sở dữ liệu, v.v.), nhưng chúng tôi gặp phải một số vấn đề với các trang phức tạp hơn. quy trình) như xung đột tên thông qua các thành phần bao gồm, không trong suốt và nặng, trộn các thành phần mô hình/xem/điều khiển, v.v.

+0

Câu hỏi này có thể phù hợp hơn cho [Lập trình viên StackExchange] (http://programmers.stackexchange.com/questions/tagged/coldfusion)? –

+0

Cách tiếp cận của bạn là hợp lý và chia sẻ một số điểm chung với sản phẩm mà công ty của tôi đã phát triển nhằm mục đích này. SlashDB kết nối cơ sở dữ liệu với các ứng dụng web và di động được ủy quyền thông qua tự động tạo REST API. Hồ sơ StackOverflow của tôi có liên kết đến trang web, cũng xem blog ở đó cho một số video. –

Trả lời

4

Đây là câu trả lời của tôi, dựa trên nghiên cứu tôi đã thực hiện gần đây. Công ty của tôi đang xem xét phát triển sản phẩm mới, vì vậy tôi đã hỏi rất nhiều câu hỏi giống như chính bạn. Chúng ta cũng bị thu hút bởi khái niệm REST API không chỉ là thứ cho phép front-end mà còn trở thành một điểm tích hợp cho các ứng dụng khác. Chúng tôi đã duy trì một API riêng biệt cho các sản phẩm khác và tất cả đều dễ dàng để nó đồng bộ hóa lỏng lẻo với Ứng dụng chính nếu bạn không cẩn thận.

  1. Bạn có sử dụng phương pháp REST/Single-Page thông minh không? Nó chắc chắn có thể được. Một số trang web lớn hoạt động như thế này. Những gì dường như là phổ biến là một cách tiếp cận lai nơi máy chủ có thể tạo HTML cho trang đầu tiên, có lẽ với 10 sản phẩm được hiển thị), nhưng việc chuyển sang 10 sản phẩm tiếp theo sẽ thông qua một cuộc gọi RESTful, với kết xuất phía máy khách. Điều này có thể giúp bạn có được trải nghiệm khách hàng tốt nhất có thể, nhưng với chi phí nhỏ là xây dựng hai mẫu khác nhau (phía máy chủ, cũng như mẫu phía máy khách). Tùy thuộc vào cách trang web của bạn hoạt động và ai sử dụng nó, điều này có thể hoặc không cần thiết. Ví dụ, GMail là một ứng dụng một trang, nhưng nó là một ứng dụng và bạn chịu đựng được vài giây nó dành cho bạn một thanh tải, trong khi chạy một trang bán lẻ, loại trễ này có thể không được chấp nhận.

  2. Yêu cầu cục bộ có làm chậm tải không?Bạn có nghĩa là có trang web của bạn làm cho các cuộc gọi REST để có được dữ liệu của nó, thay vì đi thẳng vào cơ sở dữ liệu? Trong trường hợp đó, nó sẽ thêm một số độ trễ, vì có thêm một hop mạng liên quan, nhưng trong một hệ thống cũng được thiết lập và triển khai, tôi nghĩ rằng độ trễ có thể quản lý được.

  3. HTTP cơ bản. Tôi chỉ xem xét nó qua HTTPS. Nó không đủ an toàn trên HTTP. Điều này được đề cập trong bản trình bày mà tôi liên kết đến bên dưới.

  4. Dữ liệu phụ thuộc. Tôi cũng đang băn khoăn về điều đó. Những gì tôi vòng rất hữu ích đã được xem presentation from StormPath, trong đó bao gồm rất nhiều mối quan tâm và thực hành tốt khi thực hiện một RESTful API. Chúng bao gồm một cách tiếp cận để liên kết dữ liệu (tuân theo nguyên tắc HATEOAS) nhưng cũng mở rộng thực thể, do đó, GET đến /customers/ID123?expand=address sẽ trả về đại diện của khách hàng, nhưng với Địa chỉ được nhúng của họ, đó là cách hay để tránh nhiều chuyến đi khứ hồi tất cả dữ liệu bạn cần.

Về hỗ trợ REST của CF10. Tôi nhìn nó và không phải tất cả đều quan tâm đến cách nó hoạt động. Tôi có thể đã hiểu lầm nó, nhưng ứng dụng REST dường như rất tách biệt với bất kỳ loại ứng dụng thông thường nào mà bạn đang cố gắng kết hợp với nhau. Việc thực hiện Railo có vẻ khá giống nhau, nhưng với một chút niggles hơi khác nhau. Chắc chắn, việc xây dựng một ứng dụng REST hoạt động trên cả hai dường như khá phức tạp. Bạn đã từng xem Taffy chưa? Tôi đã không, nhưng sẽ quan tâm đến cách nó hoạt động.

Bởi vì Văn là một phong cách kiến ​​trúc, chứ không phải là một tiêu chuẩn nghiêm ngặt, có rất nhiều vĩ độ cho chính xác làm thế nào bạn thực hiện điều này và rất nhiều cơ hội cho cuộc tranh luận/tranh luận về cách tiếp cận 'tốt nhất'

1

Gần đây tôi đã đến trên một dự án có tên Taffy, đây là một khuôn khổ để viết các API REST trong ColdFusion. Nó hoạt động với CF8-10 và Railo. Tôi rất ấn tượng với cách cấu trúc mã và cách viết dễ dàng để viết từng điểm cuối REST. Bạn có thể muốn xem xét dự án đó cho phần cuối.

1

Bạn có sử dụng phương pháp REST chung này cho mọi thứ trên mọi trang không? (Có thông minh để sử dụng phần còn lại trên các trang web để bắt đầu với?)

Tôi không chắc chắn, nhưng có một điều lớn làm tôi bực mình là cách gọi REST trong CF10 bỏ qua xử lý onError lỗi. Đây là số bug report đã được đánh dấu Đã sửa lỗi, nhưng AI BIẾT KHI CHÚNG TÔI CÓ THỂ HOÀN TOÀN thực sự. CF11? Tôi không biết, hỏi Adobe.

Điều này thực sự hút là một trong những không bao giờ có thể biết chính xác những gì đã đi sai khác hơn là nhận được một mã lỗi 5xx ở phía khách hàng.

Yêu cầu HTTP cục bộ có ảnh hưởng đến hiệu suất và làm chậm tải trang không?

Chắc chắn rồi. Tôi nghĩ sẽ tốt hơn nếu cả hai mặt trước API REST232 đều có cùng phương thức trong lớp Dịch vụ.

BasicAuth có đủ để bảo vệ dữ liệu không? (Tôi chỉ cần thêm các tính năng bảo mật nhỏ như , chẳng hạn như yêu cầu bảo vệ chống spam)

Thường có, nếu đó là HTTPS. Phụ thuộc vào những gì là "đủ".

Tốt nhất là bạn nên tránh các phụ thuộc trong dịch vụ web như /khách hàng/truy cập/địa chỉ/để nhận dữ liệu của nó?

Đồng ý với barnyr, vui lòng đọc câu trả lời của anh ấy.

Cuối cùng, chỉ muốn chỉ ra rằng ngoài việc thực hiện chính thức của CF10, có các khung như Taffy hoặc ColdBox có thể xử lý các API RESTful mà không có CF10.

Ngoài ra, hãy kiểm tra What can CF10 RESTful API do that Coldbox RESTful API cannot do? And vise versa?

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