2013-09-08 35 views
12

là có thể nhận siêu dữ liệu của dịch vụ OData ở định dạng JSON không?

Khi tôi cố gắng sử dụng format=json, nó không hoạt động. Đây là những gì tôi đã thử:

http://odata.informea.org/services/odata.svc/$metadata/?format=json 

Trả lời

15

Tài liệu $metadata ở định dạng CSDL, hiện chỉ có biểu diễn XML. (Như một mặt lưu ý, nếu bạn muốn yêu cầu định dạng json cho một loại khác nhau của OData tải trọng, đảm bảo token format truy vấn có $ ở phía trước của nó:. $format=json)

Vì vậy, không có nó không phải là khả thi. Bạn có thể, tuy nhiên, có những tài liệu phục vụ trong JSON, mà là một tập hợp con của các tài liệu $ metadata:

http://odata.informea.org/services/odata.svc?$format=json 

này sẽ không có thông tin loại, nhưng nó sẽ liệt kê các điểm nhập cảnh có sẵn của các dịch vụ (ví dụ: , các bộ thực thể).

0

Tôi đã đồng ý với câu trả lời trước. Điều này không được hỗ trợ bởi đặc tả kỹ thuật nhưng một số khung/thư viện OData sắp thực hiện tính năng này.

Tôi nghĩ về Olingo. Điều này có thể hữu ích cho bạn nếu bạn cũng thực hiện phía máy chủ. Xem vấn đề này trong Olingo JIRA để biết thêm chi tiết:

Hy vọng nó giúp bạn, Thierry

0

Để thay thế cho ?$format=json, bạn cũng có thể chỉ cần đặt hai tiêu đề sau:

  • Accept: application/json
  • Content-Type: application/json; charset=utf-8

Tôi không chắc đó là phiên bản OData yêu cầu tối thiểu, nhưng hoạt động này một cách hoàn hảo đối với tôi trên Microsoft Dynamics NAV 2016, trong đó sử dụng OData v4.

1

Bạn có thể sử dụng jQuery để lấy thông tin có liên quan từ siêu dữ liệu dịch vụ OData $ metadata.

Lấy ví dụ:
Bạn viết kiểm tra đơn vị để kiểm tra tên thuộc tính của thực thể OData khớp với thực thể ứng dụng của bạn. Sau đó, bạn phải lấy các thuộc tính của thực thể OData.

$.ajax({ 
      type: "GET", 
      url: "/destinations/odata-service/$metadata", 
      beforeSend: function() { 
       console.log("before send check"); 
      }, 
      dataType: "xml", 
      contentType: "application/atom+xml", 
      context: document.body, 
      success: function(xml) { 
       console.log("Success ResourceTypes"); 
       var ODataTypeINeed = $(xml).find('EntityType').filter(function(){ 
             return $(this).attr('Name') == 'ODataTypeINeed' 
            });     
       $(ODataTypeINeed).find('Property').each(function() { 
        console.log($(this).attr('Name')); //List of OData Entity properties 
       }); 
      }, 
      error: function(err) { 
       console.log(err); 
      } 
}); 
Các vấn đề liên quan