2017-12-06 1 views
0

나는 백엔드 (Spring Data REST)에 내 보낸 저장소가있는 많은 관련 자원이 있습니다. 클라이언트가 GET으로 "루트"리소스를로드 한 다음 "_links"속성을 통해 관련 리소스를 게으른로드합니다. 그러면 클라이언트는로드 된 그래프에서 일부 자원을 수정할 수 있습니다.스프링 데이터 REST를 사용하여 깊이 중첩 된 JSON 구조를 구현하는 가장 좋은 방법은 무엇입니까?

모든 게으른 리소스가있는 json을 사용하고 수정 된 리소스를 즉시 버전 확인 (낙관적)으로 업데이트하는 서비스를 구현하고 싶습니다.

이것을 구현하는 가장 좋은 방법은 무엇입니까? 이 방법이 좋지 않은 방법입니까?

+0

https://www.graphql.com/ – StanislavL

+0

의 좋은 장소로 들리지만 효과적인 구현 방법과 비슷하지만 구현 방법이 흥미로울 것입니다. 특정 구성이 누락되면 JVM을 토스 (toss)로 보내고 유틸리티 항목을위한 싱글 톤 디자인 패턴을 구현했는지 확인하십시오. –

+0

"하지 마세요". JSON은 데이터 구조 자체를 나타내는 것이 아니라 데이터 구조를 표현한 것입니다. 적절한 추상화 및 캡슐화를 사용하십시오. I/O에서만 JSON에서 변환하십시오. – Raedwald

답변

0

사운드 graphql.com 그것은 모두를 얻을 수

을위한 좋은 장소로 하나의 요청으로 필요한 데이터 필요한 데이터 부분만을 요청하는 API 및 호출 쿼리를 정의 할 수 있습니다.

사용자 지정 업데이트도 지원합니다.

0

무슨 뜻인지 완전히 이해하지 못했지만 SDR에서 '열심히'중첩 된 리소스를로드하려는 경우 관련 '중첩 된'repos의 내보내기를 해제하거나 완전히 삭제할 수 있습니다. 예를 들어 :

@Entity 
public class Parent { 
    //... 
    @OneToMany(cascaded = ALL, orphanRemoval = true) 
    private Set<Child> children; 
} 

@Entity 
public class Child { 
    //... 
} 

@RepositoryRestResource 
public interface ParentRepo extends JpaRepository<Parent, Long> {} 

@RepositoryRestResource(exported = false) 
public interface ChildRepo extends JpaRepository<Child, Long> {} 

또한 당신은 OneToMany 주석에 cascade = ALL, orphanRemoval = true 매개 변수를 추가 할 수 있습니다.

그런 다음 모든 자식 개체는 부모 객체에 의해 관리되며, 공통의 페이로드는이 같은 모습이 될 것입니다 :

{ 
    "name": "parent1", 
    "children": [ 
     { 
     "name": "child1" 
     }, 

     { 
     "name": "child2" 
     } 
    ] 
} 
+0

답변 해 주셔서 감사합니다. 나는 클라이언트가 리소스를 느리게로드하지만 하나의 요청으로 리소스를 업데이트한다는 혼합 된 동작이 필요하다고 생각합니다. 쓰기에 "exported = true"리소스를 만들 수 있고 읽기에 "exported = false"리소스를 만들 수 있습니까? – Aleksandr

+0

당신을 도운/upvote 대답을 수락 잊지 마세요 ...;) – Cepr0

+0

나는 다른 질문에 대답을 수락하지만,이 질문은 나에게 아직도 불분명하다. 내가 "수출"자원 (클라이언트 게으른 그들을로드),하지만 "트랜잭션" "수정 된 자원을 함께 커밋"뭔가가 필요합니다. – Aleksandr

관련 문제