저는 RESTful 웹 서비스의 클라이언트 인 SPA에서 작업하고 있습니다. 클라이언트와 서버 모두 동일한 프로젝트의 일부입니다. 즉 양측의 코드를 자유롭게 수정할 수 있습니다. 나는 RESTful API 디자인을 읽고 모든 것을 "올바른"방식으로 수행하도록 노력해 왔습니다. 내가 읽어야 할 테이크 어웨이 중 하나는 클라이언트가 더 많은 정보에 액세스 할 수 있도록 RESTful 서비스가 하이퍼 링크를 게시해야하며 클라이언트는 진입 점 이외의 서비스 URL에 대한 하드 코딩 된 정보가 없어야한다는 것입니다. 하이퍼 링크를 사용하면 서버가 URL을 변경하는 경우 클라이언트의 유연성이 향상됩니다.딥 링크를 사용하여 RESTful 클라이언트/서버 웹 앱에서 URL을 하드 코딩하지 않도록하려면 어떻게해야합니까?
그러나 사용자가 특정 클라이언트 상태에 연결할 수있을 때이 아키텍처가 어떻게 작동하는지 알 수 없습니다. 예 :
보기 중 하나는 구입할 수있는 책 목록입니다. 클라이언트는이 페이지를 식별하기 위해 브라우저의 위치를 /books/
으로 설정하고 백엔드 데이터는 해당 URL을 게시하는 API 엔트리 포인트에서 가져온 엔드 포인트 /api/books/
에서 온 것입니다. 서비스 URL이 같은 JSON 문서로 응답
[
{"title": "The Great Gatsby",
"id": 24,
"url": "http://localhost/api/books/24/"},
< and so on >
]
클라이언트는, 클릭하면, 한 권의 책의 상세보기로 이동 읽을 수있는 링크를 생성하려면이 옵션을 사용합니다. 브라우저의 위치는 /books/the-great-gatsby/24/
으로 업데이트되어 사용자가이보기를 책갈피에 추가하고 링크 할 수 있습니다.
사용자가이 링크를 직접 클릭하면 어떻게 처리됩니까 ?? 하드 코드 된 URL이 없어도이 책의 정보를 어디에서 얻을 수 있는지 어떻게 알 수 있습니까?
내가 가지고 올 수있는 최선은 다음과 같은 요청의 순서입니다 : - 서비스
OPTIONS /api/books/
(책에서 모두가 찾을 수)을 사용할 수 있습니다보기 -
GET /api/
에 대한 설명을 볼 것 책에서 작업 할 수 있습니다 (예 : ID로 책을 찾을 수 있는지 확인).GET /api/books/?id=24
- 브라우저 위치에서 ID와 일치하는 책을 찾을 수 있는지 확인하십시오.GET /api/books/24/
는 - 사실 짧은 데이터
뭐든지 클라이언트가 API의 URL에 대한 지식을 하드 코딩 한 것을 의미하는 것입니다 검색 할 수 있습니다. 그러나 웹 앱 관점에서 보았을 때 이것은 비효율적으로 보입니다.
누락 된 트릭이 있습니까? /api/books/24/
끝점을 하드 코드하지 않고 도서 ID 24에 대한 세부 정보를 얻는 방법을 클라이언트가 알 수있는 방법이 있습니까?
사용자가 URL을 북마크 할 수있게하려면 서버에서 해당 위치를 지원해야합니다. '하드 코드 된'정보라고 부르지 않습니다. –
어쩌면 내가 아키텍처를 이해하지 못할 수도 있습니다. URL을 생성 한 클라이언트 측 코드가있는 경우 클라이언트가 콘텐츠를 다시 생성해야합니다. 그래서이 경우'http : // localhost/api/books/24 /'를 어디에 저장할 것인지 궁금 할 것입니다. –
@JochenBedersdorfer 정확하게 - 자바 스크립트 코드에서 해당 URL 작성기를 하드 코딩하는 대안을 볼 수 없으므로 효율적으로'/ books/the-great-gatsby/24 /'보기를 렌더링 할 수 있습니다. –