2013-02-09 3 views
2

에서 ASP.NET WebAPI에서 리소스에 대한 하이퍼 링크를 생성하기위한 솔리드 지침이 있습니까? 나는이에 게시물의 몇 가지를 읽었습니다 : 정보 비록하이퍼 링크 WebAPI

http://codebetter.com/glennblock/2012/01/08/hypermedia-and-web-api-design-brain-dump-and-samples/

http://blog.ploeh.dk/2012/04/17/HyperlinkingWithTheASPNETWebAPI.aspx

은 가장 자원에 대한 링크를 구현하는 방법의 측면에서 다른 구체적인 Microsoft의 지침 또는 수없는 것으로 나타납니다 (즉, 서비스 모델에서 DTO를 사용하여 구현 된 객체 모델). 우리가 진정한 RESTful 서비스를 구현하기 위해 WebAPI를 사용한다면, 하이퍼 링크가 중요합니다. 그리고 WebAPI에 대한 지원/안내가 기대됩니다.

간단한 구현 예는 주소 집합과 SupportIncident 컬렉션이있는 Contact 엔터티를 사용하는 것입니다. 내가 그렇게 같은 것을 보일 것이다 언급 한 첫 번째 기사를 기반으로 클래스 정의 :

public class Link 
{   
    public Uri Uri { get; set; } 
    public string Rel { get; set; } 
    public string Name { get; set; } 
} 

public class ContactDTO 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 

    public IList<AddressDTO> Addresses { get; set; } 

    public IList<IncidentDTO> Incidents{ get; set; } 

    public IList<Link> Links { get; set; } 

} 

WebAPI는 HTTP를 통해이 모델 (XML/JSON)과 GET/PUT/POST를 노출에서 중대하다/액션 삭제 리소스에 있지만 진정한 RESTful 서비스를 구축하려면 인지 알고 싶습니다. a) WEBAPI의 링크 생성에 대한 고유 한 지원이 있습니까? b) 클라이언트가 리소스에 대한 링크를 포함하고있는 위의 모델을 노출하기위한 적절한 지침과 클라이언트가 페이로드의 일부로 링크를 보내는 경우 API가 PUT/POST를 처리하는 방법은 있습니까? 이것들은 무시해야합니까?

+0

는 당신이 웹 API의 하나로, OData 지원을 생각 해 봤나? 이것은 당신이 찾고있는 하이퍼 링크와 편안한 의미를 풍부하게 지원합니다. http://blogs.msdn.com/b/webdev/archive/2013/01/29/getting-started-with-asp-net-webapi-odata-in-3-simple-steps.aspx –

+0

중 하나로, OData 지원은 현재 반 굽고 통합하기 쉬운 것 같지 않습니다. 게다가 EDM 모델을 정의해야 할 것입니다. –

+1

@Abhijeet이 문제에 대해 결국 무엇을 생각해 냈습니까? – Tr1stan

답변

1

내 의견으로는 Ben Foster이 작업에 큰 도움이되었습니다. 아래의 블로그 게시물을 참조 :

기본적인 아이디어는 당신이 밖으로 메시지 처리기를 통해 길에 ObjectContentValue 속성을 수정하는 것입니다. 이 메시지 처리기는 등록 된 이른바 "Response Enrichers"에이 작업을 위임하고 각자는 객체 유형을 풍부하게 할 수 있는지 여부를 평가할 수있는 기회를 갖습니다.

+1

나는 그 포스트를 보았고 Ben에게 그의 접근법과 원주민 지원의 부족에 대해 실제로 접근했다.접근 방식에서 가장 큰 문제는 비즈니스 계층 논리, 컨트롤러 논리 및 "Enricher"논리 사이에서 논리가 분산되어 있다는 것입니다. Glenn Block은 링크 생성 옵션을 컨트롤러에 더 가깝게 유지하는 의견이며 나는 동의합니다. 게다가, 엔티티 당 엔티티 (enricher per entity)를 갖게되면 관리상의 문제로 신속하게 이어질 것입니다. 모델에 100 개의 엔티티가있는 경우 ... 수학을 수행합니다. –

0

Web API here에서 Hypermedia 사용을 보여주는 샘플 응용 프로그램을 만들었습니다. 여기에 또 다른 하나가 있습니다 https://github.com/webapibook/issuetracker과 에이미 Palamountain 여기에 또 다른 좋은 예가 있습니다 https://github.com/ammeep/hyper-library.

DTO와 링크를 사용할 때의 주된 문제점 중 하나는 기본적으로 이러한 DTO가 application/json 또는 application/xml으로 직렬화된다는 것입니다. 이러한 미디어 유형 모두 링크 연결 방법에 대한 사양이 없습니다. 따라서 클라이언트는 이러한 링크를 처리하는 방법에 대한 대역 외 (out-of-band) 지식이 필요합니다.

하이퍼 미디어를 올바르게 수행하려면 xhtml, hal, collection + json, json-ld, siren과 같은 하이퍼 미디어 지원 미디어 유형을 사용해야합니다.