2017-11-25 28 views
0

깃털 프레임 워크는 REST 디자인에 충실하도록 설계되었지만 규칙을 약간 위반할만한 가치가 있다고 생각합니다. HTTP 및 Socket.io를 통해 플레이어 컨트롤에 프로그래밍 방식으로 액세스 할 수있는 뮤직 플레이어 API를 만들고 싶습니다.깃털 사용자 지정 서비스 메서드 - 규칙에 대한 설명

플레이어 그러나 get, put, patch, postdelete 간단한 아니다. 한 명의 플레이어가 모든 사용자에 대해 생성되며 삭제되지 않으며 변경 만됩니다. 메서드의 서브 루틴 (예 : PATCH /player/playPATCH /player/pause)에 play, pause, setQueue 등과 같은 사용자 지정 메서드가 필요합니다.

이것은 정확히 how Spotify does it in their API이며 매번 PATCH 요청을 동일한 끝점에 보내고 플레이어 데이터를 수동으로 업데이트하는 것보다 훨씬 의미가 있습니다. PATCH /player {nowPlaying: {index: newIndex}}을 사용하여 다음 트랙으로 건너 뜁니다. 여기서 API 사용자는 플레이어 데이터의 스키마와 작동 방식을 알아야합니다. 대신 PATCH /player/next과 같은 것이 훨씬 더 이해하기 쉽고 사용하기 쉽습니다.

Express에서 수동으로 모두 수행하지 않고 Feathers API를 사용하여 이와 같은 서비스를 어떻게 구현합니까? 가능하지 않은 경우 맞춤 표현 코드를 나머지 앱과 잘 통합 할 수있는 가장 친숙한 방법은 무엇입니까? 스포티 파이는 그런 식으로 할 것 같지만

답변

1

, 그것은 GET은 데이터를 검색 이외의 다른 부작용이 없어야 안전한 방법입니다 내용의 HTTP specification에 따라되지 않습니다 특히

을, GET과 HEAD 방법은 검색 이외의 다른 행동을 취하는 중요성을 가져서는 안된다는 규칙이 확립되었다. 이러한 방법은 "안전"하다고 간주되어야합니다.

깃털의 한계는 일반적인 함정을 피하기 위해 매우 의도적입니다 (최악의 경우 Google 크롤러가 들어오고 페이지의 링크를 따라 많은 데이터를 삭제합니다).

패치 (또는 원하는 경우 POST)를 사용할 때 여전히 여러 가지 옵션이 있습니다. 사용자 ID를 기반으로 player 서비스를 만들고 그것을 상태를 업데이트합니다

PATCH /player/<userId> { "state": "playing" } 

플레이어의 상태 변경을 수신 별도의 actions 서비스 만들기 :

POST /action { "userId": "<userId>", "state": "paused" } 

장점은 깃털이 자동으로 모두 노출 것입니다 HTTP 및 웹 소켓을 통한 이러한 API를 사용하면 자동으로 실시간 업데이트 및 인증을받을 수 있습니다. 모두 일반 Express에서 수동으로 수행해야합니다.