我需要对开放 API ( https://www.openfigi.com/api ) 进行以下调用
curl 示例:
curl -v -X POST 'https://api.openfigi.com/v1/mapping' \
--header 'Content-Type: text/json' \
--data '[{"idType":"ID_WERTPAPIER","idValue":"851399","exchCode":"US"}]'
请求格式 请求通过 HTTP 请求正文传入。唯一受支持的 HTTP 动词是 POST。以下是对 API 的请求示例:
[
{"idType":"ID_ISIN","idValue":"US4592001014"},
{"idType":"ID_WERTPAPIER","idValue":"851399","exchCode":"US"},
{"idType":"ID_BB_UNIQUE","idValue":"EQ0010080100001000","currency": "USD"},
{"idType":"ID_SEDOL","idValue":"2005973","micCode":"EDGX", "currency":"USD"}
]
使用ServiceStack Request DTO,如何制作RequestDto来实现对上述第三方服务端点的调用。
最佳答案
这只是创建与您想要输出的 JSON 和您想要接收的 JSON 的形状相匹配的 DTO 的练习。要发出准确的 JSON 属性名称,您可以在请求 DTO 上使用 [DataMember]
,或使用 JsConfig.EmitCamelCaseNames = true
告诉 ServiceStack 以驼峰命名法序列化属性,或者您可以使用JsConfig.With() to create a Custom Scope .
我创建了一个 Live example of this in Gistlyn您可以使用它来针对 Bloomberg 的 API 进行实验。
我在这里使用了 [DataMember]
属性,因为它将独立于您的 Json 序列化配置工作。您不需要对响应 DTO 执行此操作,因为 ServiceStack 序列化程序不区分大小写。
因此,要发送与您可以使用的 JSON 形状匹配的请求:
[DataContract]
public class Mapping
{
[DataMember(Name="idType")]
public string IdType { get; set; }
[DataMember(Name="idValue")]
public string IdValue { get; set; }
[DataMember(Name="exchCode")]
public string ExchCode { get; set; }
[DataMember(Name="currency")]
public string Currency { get; set; }
[DataMember(Name="micCode")]
public string MicCode { get; set; }
}
您可以使用ServiceStack的HTTP Utils轻松向第三方 API 发送请求,例如:
var url = "https://api.openfigi.com/v1/mapping";
var json = url.PostJsonToUrl(new[]{
new Mapping { IdType = "ID_ISIN", IdValue = "US4592001014" },
new Mapping { IdType = "ID_WERTPAPIER", IdValue = "851399", ExchCode = "US" },
new Mapping { IdType = "ID_BB_UNIQUE", IdValue = "EQ0010080100001000", Currency = "USD" },
new Mapping { IdType = "ID_SEDOL", IdValue = "2005973", MicCode = "EDGX", Currency = "USD" },
});
然后,要接收响应,您需要创建与 JSON 响应的形状相匹配的 DTO,如下所示:
public class BloombertResult
{
public string Figi { get; set; }
public string SecurityType { get; set; }
public string MarketSector { get; set; }
public string Ticker { get; set; }
public string Name { get; set; }
public string UniqueId { get; set; }
public string ExchCode { get; set; }
public string ShareClassFIGI { get; set; }
public string CompositeFIGI { get; set; }
public string SecurityType2 { get; set; }
public string SecurityDescription { get; set; }
public string UniqueIdFutOpt { get; set; }
}
public class BloombergResponse
{
public List<BloombertResult> Data { get; set; }
public string Error { get; set; }
}
您可以将其反序列化为 BloombergResponse 的集合,例如:
var response = json.FromJson<BloombergResponse[]>();
GiSTLyn 将通过在监 window 口中单击每个变量来向您显示每个变量的可读预览。或者,如果您在 C# 单元测试中,您可以快速查看填充的 DTO:
response.PrintDump();
关于Bloomberg OpenFIGI 的 ServiceStack 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45118966/