2008-08-14 21 views
26

Tôi muốn bắt đầu di chuyển các lớp nghiệp vụ ứng dụng của chúng tôi vào một bộ sưu tập các dịch vụ web REST. Tuy nhiên, hầu hết Intranet của chúng tôi đã được xây dựng bằng cách sử dụng ASP cổ điển và hầu hết các nhà phát triển nơi tôi làm việc tiếp tục lập trình trong ASP cổ điển. Lý tưởng nhất, sau đó, để chúng được hưởng lợi từ những lợi thế của một bộ API web duy nhất, nó sẽ phải được gọi từ các trang ASP cổ điển.Gọi dịch vụ web REST từ trang asp cổ điển

Tôi không có ý tưởng nhỏ nào về cách thực hiện điều đó.

Trả lời

25

Bạn có thể sử dụng một sự kết hợp của JQuery với các cuộc gọi JSON để tiêu thụ các dịch vụ REST từ máy khách

hoặc

nếu bạn cần phải tương tác với các dịch vụ REST từ lớp ASP bạn có thể sử dụng

MSXML2.ServerXMLHTTP

như:

Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP") 
HttpReq.open "GET", "Rest_URI", False 
HttpReq.send 
+2

Điều gì xảy ra nếu dịch vụ REST của tôi có yêu cầu xác thực cơ bản? Điều gì sẽ thay đổi trong phương pháp thứ hai gọi nó từ ASP cổ điển? – mutex

0

Tất cả bạn cần là một máy khách HTTP . Trong. Net, WebRequest hoạt động tốt. Đối với ASP cổ điển, bạn sẽ cần một thành phần cụ thể như this one.

9

@KP

Bạn thực sự nên sử dụng MSXML2.ServerXMLHTTP từ các ứng dụng/máy chủ bên ASP. XMLHTTP chỉ nên được sử dụng phía máy khách vì nó sử dụng WinInet không được hỗ trợ để sử dụng trong các ứng dụng máy chủ/dịch vụ.

Xem http://support.microsoft.com/kb/290761, câu hỏi 3, 4 & 5 và

http://support.microsoft.com/kb/238425/.

Điều này khá quan trọng, nếu không bạn sẽ gặp phải ứng dụng web của bạn treo và tất cả các loại vô nghĩa kỳ lạ đang diễn ra.

3

Một số câu trả lời được trình bày ở đây xuất hiện để đề cập đến cách sử dụng ClassicASP để tiêu thụ các dịch vụ web & Cuộc gọi REST.

Theo ý kiến ​​của tôi, một giải pháp gọn gàng hơn có thể là cho ClassicASP của bạn để phục vụ dữ liệu trong các định dạng REST. Hãy để mã khách hàng dựa trên trình duyệt của bạn xử lý 'mashup' nếu có thể. Bạn sẽ có thể làm điều này mà không cần kết hợp bất kỳ thành phần ASP nào khác.

Vì vậy, dưới đây là cách tôi sẽ mockup hỗ trợ REST mới sáng bóng trong ClassicASP:

  1. cung cấp một trang web ASP duy nhất đóng vai trò như một bệ hạ cánh
  2. Các bệ hạ cánh sẽ xử lý hai tham số: động từ và URL , cộng với một bộ nội dung biểu mẫu
  3. Sử dụng một số loại khối chuyển đổi kiểm tra URL và chuyển động từ (và nội dung biểu mẫu) đến trình xử lý có liên quan
  4. Trình xử lý sau đó sẽ xử lý động từ (PUT/POST/GET/DELETE)) cùng với nội dung biểu mẫu, trả về thành công/thất bại mã cộng với dữ liệu khi thích hợp.
  5. pad đích của bạn sẽ kiểm tra sự thành công/code thất bại và trả lại trạng thái HTTP tương ứng cộng với bất kỳ trở dữ liệu

Bạn sẽ được hưởng lợi từ một lớp hỗ trợ mà giải mã/mã hóa các dữ liệu mẫu từ/đến JSON, vì đó sẽ giảm bớt việc triển khai phía máy khách của bạn (và có khả năng hợp lý hóa khối lượng dữ liệu được truyền). Xem cuộc hội thoại tại đây tại Any good libraries for parsing JSON in Classic ASP?

Cuối cùng, ở phía máy khách, cung cấp một phương thức nhận trọng tải, Url và dữ liệu. Trong ngắn hạn, phương pháp sẽ đối chiếu các tham số và chuyển tiếp chúng đến đích của bạn. Trong thời gian dài hơn (khi bạn chuyển từ ASP cổ điển), phương thức của bạn có thể gửi dữ liệu đến url 'thực'.

Chúc may mắn ...

0

Một giải pháp khả thi là để viết một DLL NET mà làm cho các cuộc gọi và trả về kết quả (có thể quấn một cái gì đó giống như RESTSharp - cung cấp cho nó một API đơn giản tùy theo nhu cầu của bạn). Sau đó, bạn đăng ký DLL như là một DLL COM và sử dụng nó trong mã ASP của bạn thông qua phương pháp CreateObject.

Tôi đã thực hiện việc này cho những việc như tạo JWT và ký hiệu muối và mật khẩu băm đã ký. Nó hoạt động độc đáo (trong khi bạn làm việc như điên để viết lại ASP).