2014-11-24 2 views
2

GameSite 사이에 일대일 관계를 만들어야합니다. 각 게임은 한 사이트에서 발생합니다. 내 데이터베이스에서 siteSite 개체를 가리키는 Game 개체의 특성입니다.일대일 RESTful API 관계 만들기

GET /game/<game_id>/site 

사이트 ID를 숨기고, 게임의 사이트를 가져옵니다 : 나는 이것에 대해 인터넷에서 많이 찾을 수 없습니다

,이 내 생각이다.

POST /game/<game_id>/site 

게임의 사이트를 생성합니다. 게임을 만들 때 한 번만 사용됩니다.

PUT /game/<game_id>/site 

DELETE /game/<game_id>/site 

게임 사이트를 삭제 게임 사이트 업데이트합니다.

하지만 누군가가 모든 사이트의 목록을 얻고 싶다면 어떻게해야합니까? /sites URI를 추가하고 Site 개체에 대해 get 메서드를 사용하여 game_id이 전달되었는지 여부를 감지해야합니까? 또한 사람들이 /sites/<site_id>에 의해 사이트에 액세스하도록해야합니까 아니면 sites의 클라이언트 목록을 모두 games을 반복하여 채우도록해야합니까? 마지막으로, 나는 보통 각 객체에 대한 'href'속성을 가지고 있는데, 이것은 그 자체로의 링크이다. 위의 디자인 (URI가 /sites/ 인 경우)을 사용했다면 /game/<game_id>/site 또는 /sites/<site_id>으로 링크합니까? 동일한 정보에 액세스 할 수있는 장소가 두 개 있어야합니까?

올바른 경로에 있습니까? 아니면 REST에서 일대일 관계를 모델링하는 더 좋은 방법이 있습니까?

중요한 점은 API를 만들기 위해 Flask-RESTful을 사용하고 있습니다.

답변

0

귀하의 아이디어는 많은 의미가 있습니다.

큰 차이는 sitegame과 별개로 존재할 수 있는지 여부입니다. 할 수있는 것처럼 들리네. 예를 들어 두 게임이 같은 사이트를 가리킬 수 있습니다.

RESTful API 디자인에서 알 수있는 한 동일한 site 리소스를 /game/<game_id>/site/sites/<side_id>을 통해 노출하는 데는 문제가 없습니다. 그러나 REST는 하이퍼 미디어를 통해 데이터를 연결할 것을 권장합니다.

두 개의 다른 위치에 site을 표시하면 두 URL을 통해 사이트 개체와 상호 작용할 수 있기를 기대하므로 복잡한 작업을 수행 할 수 있습니다.

나의 추천 명시하여 구조를 유지하고 간단한은 다음과 같습니다

  • /sites
  • 에서 사이트 리소스의 컬렉션을 되세요 game에서 /site/<site_id>
  • 사용에 링크 개체site 자원을 노출 siteThoughts on RESTful API design by Geert Jansen을 참조하십시오.링크 개체의 디자인에 따라

, 당신의 game 리소스 표현이 같은 것을 포함 할 것이다 :

{ 
    "game_id": 10, 
    ..., 
    "link": { 
    rel: resource/site 
    href: /api/sites/14 
    } 
} 

더 많은 설계 작업없이를, 이것은 당신이 사이트의 정보를 얻을 수있는 두 번째 전화를 걸 수 있습니다 의미합니다. 모든 디자인의 타협이 있습니다.