사내 WCF 기반 REST 서비스를 사용하는 응용 프로그램을 작성 중이며 REST 초보자라는 것을 인정합니다. "서비스 참조 추가"를 사용할 수 없기 때문에 서비스 메소드의 반환 유형을 나타내는 기성 프록시 객체가 없습니다. 지금까지 서비스로 작업 할 수 있었던 유일한 방법은 서비스가 공개하는 데이터 형식을 포함하는 어셈블리를 공유하는 것입니다.공유 어셈블리가 WCF REST 서비스에서 개체를 만들 수있는 유일한 방법입니까
은 DTO들 (DataContracts)를 구현하고 내 서비스에서 해당 유형을 노출 :
이 있죠 나의 문제는 내가 두 가능성을 볼 수 있다는 것입니다. 어셈블리를 공유해야하지만이 방법을 사용하면 어셈블리에 포함 된 유형이 서비스 계약 및 DTO로 제한됩니다. DTO를 사용하기 위해 DTO를 사용하는 것을 좋아하지는 않지만, 도메인 객체에서 DTO로 또는 그 반대로 변환 할 추상화 및 처리 시간을 추가하기 때문에 DTO를 사용하는 것을 좋아하지 않습니다. 또한 클라이언트에서 비즈니스 규칙, 유효성 검사 등을 원한다면 어쨌든 도메인 개체를 공유해야하므로 추가 된 복잡성이 필요합니다.
내 도메인 개체의 직렬화를 지원하고, 해당 유형을 공개하고 해당 어셈블리를 공유하십시오. 이렇게하면 비즈니스 및 유효성 검사 로직을 클라이언트와 공유 할 수 있지만 내 도메인 개체의 일부는 클라이언트에 서비스 응용 프로그램 전용으로 노출됩니다.
아마도 예를 들어 토론을 도움이 될
... 나머지 서비스 (GET 작업)에서 얻어진 문서의 목록이 표시됩니다내 클라이언트 응용 프로그램입니다. 이 서비스는 DocumentInfo 객체 (문서의 경량 읽기 전용 표현)의 배열을 반환합니다.
사용자가 항목 중 하나를 선택하면 클라이언트는 REST 서비스 (ID로 GET)에서 전체 문서 객체를 검색하고 사용자가 객체를 수정할 수 있도록 데이터 입력 양식을 표시합니다. 풍부한 사용자 경험을위한 검증 규칙이 필요합니다.
변경 사항을 커밋하면 Document 개체가 REST 서비스 (PUT 작업)에 제출되어 백 엔드 데이터 저장소에 저장됩니다.
문서의 상태가 허용되면 사용자는 문서를 "게시"할 수 있습니다. 이 경우, 클라이언트는 Document.ID 값을 사용하여 REST 서비스에 대한 요청을 POST하고 서비스는 서버 측 문서 도메인 객체를 검색하고 Publish 메소드를 호출하여 작업을 수행합니다. Publish 메서드는 클라이언트 응용 프로그램에서 사용할 수 없어야합니다.
내 문서와 DocumentInfo 개체는 공유 어셈블리에 있어야합니다. 이렇게하면 Document.Publish를 클라이언트에서 사용할 수 있습니다. 그것을 숨길 수있는 한 가지 아이디어는 내부 메소드를 만들고 내 서비스 앱이 클라이언트가 아닌 메소드를 호출 할 수있게 해주는 InternalsVisibleTo 속성을 추가하는 것입니다. 그러나 이것은 "냄새 나는 것"처럼 보입니다.
나는 옳은 길에 있거나 완전히 빠져 있습니까?
REST에서 DTO를 사용하는 것이 가장 좋은 시점은 언제입니까? REST는 객체가 아닌 와이어를 통해 미디어 유형을 전송합니다. –
당연히이 게시물의 모든 활동에 잠시 시간이 걸렸지 만, 한 가지 질문이 나에게 잔소리가되었습니다. "미디어 유형"은 무엇을 의미합니까? – SonOfPirate