• 创建WebApi Odata v3 终结点


    开放数据协议(OData) 是用于 web 的数据访问协议。 OData 提供统一的方法来构造数据、 查询的数据和操作该数据集通过 CRUD 操作 (创建、 读取、 更新和删除)。 OData 支持 AtomPub (XML) 和 JSON 格式。 OData 还定义了一种方法来公开数据的元数据。 客户端可以使用元数据发现的类型信息和数据集的关系。

    ODataConventionModelBuilder创建 EDM 使用一组默认命名约定 EDM。 此方法要求最少的代码。 如果你想更好地控制 EDM,则可以使用ODataModelBuilder类,以通过添加属性、 键和导航属性显式创建 EDM。

    请求

    GET http://localhost:61068/odata HTTP/1.1
    User-Agent: Fiddler
    Host: localhost:61068
    Accept: application/json
    

    返回

    {
      "odata.metadata":"http://localhost:61068/odata/$metadata","value":[
        {
          "name":"Products","url":"Products"
        }
      ]
    }
    

    探索 OData 终结点

    服务元数据文档

    服务元数据文档介绍了使用一种称为概念架构定义语言 (CSDL) 的 XML 语言的服务数据模型。 元数据文档在服务中,显示的数据结构,并可用于生成客户端代码。

    若要获取的元数据文档,请将发送 GET 请求到http://localhost:port/odata/$metadata

    请求元数据
    http://localhost:61068/odata/$metadata

    结果

    <?xml version="1.0" encoding="utf-8"?>
    <edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
      <edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
        <Schema Namespace="ProjectServer.Models" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
          <EntityType Name="Product">
            <Key>
              <PropertyRef Name="ID" />
            </Key>
            <Property Name="ID" Type="Edm.Int32" Nullable="false" />
            <Property Name="Name" Type="Edm.String" />
            <Property Name="Price" Type="Edm.Decimal" Nullable="false" />
            <Property Name="Category" Type="Edm.String" />
          </EntityType>
        </Schema>
        <Schema Namespace="Default" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
          <EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
            <EntitySet Name="Products" EntityType="ProjectServer.Models.Product" />
          </EntityContainer>
        </Schema>
      </edmx:DataServices>
    </edmx:Edmx>
    

    实体集

    若要获取的产品实体集,将发送 GET 请求到http://localhost:port/odata/Products

    {
      "odata.metadata":"http://localhost:61068/odata/$metadata#Products","value":[
        {
          "ID":1,"Name":"Hat","Price":"15.00","Category":"Apparel"
        },{
          "ID":2,"Name":"Socks","Price":"5.00","Category":"Apparel"
        },{
          "ID":3,"Name":"Scarf","Price":"12.00","Category":"Apparel"
        },{
          "ID":4,"Name":"Yo-yo","Price":"4.95","Category":"Toys"
        },{
          "ID":5,"Name":"Puzzle","Price":"8.00","Category":"Toys"
        }
      ]
    }
    

    实体

    若要获取的各个产品,发送 GET 请求到http://localhost:port/odata/Products(1),其中"1"是产品 id。

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: application/json; charset=utf-8
    Expires: -1
    Server: Microsoft-IIS/8.0
    DataServiceVersion: 3.0
    Date: Mon, 23 Sep 2013 23:04:29 GMT
    Content-Length: 140
    
    {
      "odata.metadata":"http://localhost:60868/odata/$metadata#Products/@Element","ID":1,
          "Name":"Hat","Price":"15.00","Category":"Apparel"
    }
    

    OData 序列化格式

    • Atom Pub (XML)
    • JSON "light" (introduced in OData v3)
    • JSON "verbose" (OData v2)

    默认情况下,Web API 使用 AtomPubJSON"light"格式。
    若要获取 AtomPub 格式,请设置为"application/atom + xml"Accept 标头。 下面是响应正文示例:

    Accept: application/atom+xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <entry xml:base="http://localhost:61068/odata" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml">
      <id>http://localhost:61068/odata/Products(1)</id>
      <category term="ProjectServer.Models.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
      <link rel="edit" href="http://localhost:61068/odata/Products(1)" />
      <link rel="self" href="http://localhost:61068/odata/Products(1)" />
      <title />
      <updated>2019-07-09T08:14:24Z</updated>
      <author>
        <name />
      </author>
      <content type="application/xml">
        <m:properties>
          <d:ID m:type="Edm.Int32">1</d:ID>
          <d:Name>Hat</d:Name>
          <d:Price m:type="Edm.Decimal">15.00</d:Price>
          <d:Category>Apparel</d:Category>
        </m:properties>
      </content>
    </entry>
    

    JSON的轻型版本

    {
      "odata.metadata":"http://localhost:61068/odata/$metadata#Products/@Element",
      "ID":1,
      "Name":"Hat",
      "Price":"15.00",
      "Category":"Apparel"
    }
    

    OData 协议版本 3 中引入了 JSON 轻型格式。 为了向后兼容性,客户端可以请求的较旧的"详细"JSON 格式。 若要请求详细 JSON,请将 Accept 标头设置为application/json;odata=verbose。 下面是详细的版本:

    {
      "d":{
        "__metadata":{
          "id":"http://localhost:18285/odata/Products(1)",
          "uri":"http://localhost:18285/odata/Products(1)",
          "type":"ProductService.Models.Product"
        },"ID":1,"Name":"Hat","Price":"15.00","Category":"Apparel"
      }
    }
    

    此格式会告知在响应正文中,可以极大地增加开销通过整个会话的多个元数据。 此外,它会通过包装在名为"d"的属性的对象添加一定程度的间接性。

  • 相关阅读:
    jenkins实现git自动拉取代码时替换配置文件
    【一些小常识】Linux文件目录的通配符用法/*
    mysql使用——sql实现随机取一条数据
    jmeter使用问题——数据库无法连接
    【测试点】微信小程序的常见测试点
    分位数介绍
    elk开源版本支持的功能
    kali下的webshell工具-Weevely
    kali中的webshell工具--webacoo
    sql报错注入:extractvalue、updatexml报错原理
  • 原文地址:https://www.cnblogs.com/tangge/p/11158223.html
Copyright © 2020-2023  润新知