2017-05-23 2 views
0

나는 편안한 API를 가진 개념적 질문이 있습니다. 내 데이터 모델에는 국가와 회사가 있습니다.편안한 APIs : 읽기 전용/쓰기 전용 필드

api 사용자는 국가 개체를 만들 수 없습니다. 국가 별 데이터베이스에는 일정한 항목이 있습니다. 그들은 나라를 현장으로 가지고있는 회사 객체를 만들 것입니다. 회사를 표시 할 때 클라이언트 측에

{ 
    'name': 'company name', 
    'country': 5, // country id 
    ... 
} 

, 우리는 또한 국가를 표시하려면 : 회사를 만들 때, API는 JSON이 같은 기대하고있다. 한 가지 접근 방법은 회사 자원을 얻은 후 국가 개체를 가져 오기 위해 다른 get 요청을하는 것입니다. 그러나이 접근 방식은 성능에 문제가 있으며 특히 여러 회사를 나열하는 페이지에서 문제가됩니다. 나는 데이터 표현이 게시물에 대한 다른로이 올바른 접근 방식은 어느이라고 생각하고 요청을하지 않는

{ 
    'name': 'company name', 
    'country': 5, // country id 
    'country_details': { 
     'name': 'USA', 
     'phone_code': 1, 
     'id': 5 
    } 
    ... 
} 

:

또 다른 방법은 같은 GET 요청의 다른 분야에서 국가의 세부 사항을 포함하는 것 동일한 리소스에 대해 이 사건에 대한 제안이 있으십니까?

답변

1

... 동일한 자원에 대한 게시물 및 요청에 대해서는 데이터 표현이 다릅니다. RFC 7231에서

POST :

포스트 방법 것을 요청 표현이 요청 안의 대상 자원 프로세스 ...

PUT 반면 :

PUT 메서드는 상태 대상 자원의 메시지는 으로 작성되거나 요청 메시지 페이로드로 묶인 표현 으로 정의 된 상태로 대체됩니다. 주어진 표현의 성공적인 PUT은 동일한 대상 자원에 대한 후속 GET이 이 200 (OK) 응답으로 전송 된 동등한 표현이되도록합니다.

: 그리고

에서 POST 간의 기본적인 차이 PUT 방법 동봉 표현 다른 목적에 의해 강조된다. POST 요청의 대상 자원은 자원 자체의 의미에 따라 에 따라 둘러싸인 표현을 처리하기위한 것이지만 PUT 요청의 둘러싸인 표현은 대상 자원의 상태를 대체하는 으로 정의됩니다.

그래서 다른 POSTGET 몸은 문제가되지 않습니다, 그러나 그것은 PUTGET이 될 것입니다. 나는 POSTGET에 동일한 URL을 사용하지 않아도 구분을 명확하게 할 수 있습니다.어쨌든 GET에는 회사 식별자가 포함되는 반면 어쨌든 POST에는 해당되지 않습니다.

POST: /usa/company 

BODY: { 'name': 'company name' } 

RESPONSE: 200 with Content-Location header: /companies/1 
다음

그 이후 GET : 예를 들어

는, 어쩌면 회사는 국가 URL에 게시하기위한 의미, 우리는 본문에 국가 ID를 포함 할 필요가 없습니다 이런 식으로 만든다 Content-Location :

GET: /companies/1 

RESPONSE: { 'name': 'company name', 'country': 'USA' }