2013-07-17 2 views
1

몇 가지 RESTful API는 반환 된 데이터 양에 대한 호출자 옵션을 제공합니다. 종종 querystring 매개 변수 (예 : stackexchange의 필터 매개 변수)를 사용합니다.ASP 웹 API에서 반환 된 속성을 구성 가능하게 설정하려면 어떻게해야합니까?

반환되는 데이터의 양에 대해 구성 할 수있는 수준을 제공하고 싶습니다. 유연성이 동일한 수준 일 필요는 없지만 (개별적으로는 없지만) 개별 viewmodels 실행 가능한 솔루션이되지는 않을 것입니다.

그러나 웹 API에서 좋은 점을 찾으려면 고심하고 있습니다. 흰색/검은 색 속성 목록을 추가하는 것입니다. 이 작업을 수행하는 적절한 방법은 무엇입니까?

답변

1

단일 DTO로 필드의 하위 집합을 반환 할 수있는 방법 중 하나는 DTO의 선택적 속성에 대해 null 가능 유형을 지정하는 것입니다.

[DataContract] 
public class Dude 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string FirstName { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string MiddleName { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string LastName { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public int? IQ { get; set; } 
} 

당신은 클라이언트가 응답에보고 를 채울 관심을 가질 것입니다 필드의 목록을 얻을해야합니다 단지 DTO의 예에서와 당신은 다음과 같이 반환합니다.

return new Dude() { Id = 123, FirstName = "Johnny" }; 

이렇게하면 { "Id":123, "FirstName":"Johnny" }과 같은 JSON이 전송됩니다. 다른 클라이언트가 LastName라고 말하면 new Dude() { Id = 123, LastName = "Bravo" };을 반환하고 JSON은 { "Id":123, "LastName":"Bravo" }이됩니다.

이것은 XML과 JSON 모두에서 작동합니다. JSON만으로도 괜찮 으면 속성을 적용 할 필요가 없습니다. null을 무시하도록 JSON.NET에 지시해야합니다.

config.Formatters.JsonFormatter.SerializerSettings = 
     new JsonSerializerSettings 
     { 
      NullValueHandling = NullValueHandling.Ignore 
     }; 

마지막으로 필드 목록을 가져 오는 방법은 API 디자인에 달려 있습니다. 액션 필터를 사용하여 요청에서 해당 표준 필드를 가져와 지속성 저장소에서 데이터를 가져올 수 있습니다.

관련 문제