RESTful API가 전체 양식에 대한 데이터를 제공해야합니까?


13

데이터에 RESTful API를 완전히 사용하는 JavaScript 웹 애플리케이션이 있다고 가정 해 봅시다.

이 응용 프로그램에 데이터 형식이 있다고 가정하고 / product / 12345에서 레코드를 편집하고 있다고 가정하겠습니다. 양식을 작성할 때 / product / 12345에 RESTful 요청을 작성하고 JSON 데이터를 가져옵니다.

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

따라서 내 양식에는 분명히 영업 사원을 선택하기위한 드롭 다운 목록이있을 수 있습니다. 이 목록을 채워야합니다. 데이터의 출처는 어디입니까? 가장 일반적인 방법은 무엇입니까?

/ product / 12345 요청 응답의 일부로 만드는 것이 합리적입니까?

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

새 레코드를 만들 때 어떻습니까? 내 API도 다음과 같이 GET / product / new에 응답해야합니까?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}

제발 결코 무언가를 만들 GET 요청을 사용하지 않습니다. 엔드 포인트가 있어야한다 / 제품 하지 / 제품 / 새 . 새 제품을 만들려면 해당 끝점에 PUT 요청을 보내야합니다.
Kerem Baydoğan

이것은 아무것도 만들지 않습니다. 이는 기존 데이터에 대한 요청이거나 아직 저장되지 않은 새 레코드에 대한 템플릿입니다.
채드 존슨

죄송합니다. 이제 무슨 뜻인지 알겠습니다. 제품 엔드 포인트가 제품 생성 양식 드롭 다운에 대한 템플리트 제품 ​​또는 값 목록을 제공 할 책임이 없어야합니다. @Dan이 말했듯이 브라우저는 별도의 엔드 포인트를 만들고 캐싱 헤더를 사용하므로 브라우저가 성능을 위해 드롭 다운 값을 캐시 할 수 있습니다.
Kerem Baydoğan

답변:


6

나는 매우 간단하고 좁게 초점을 맞춘 끝점에 기대어 있습니다. 모든 판매 사용자를 반환하는 / sales_users와 같은 일부 위치에서 요청을 예상합니다.

/ 판매 _ 사용자 찾기 :

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

마찬가지로 범주 목록을 가지려는 경우 별도의 끝점을 추가합니다.

GET / 범주 :

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

나는 GET / product / new를 만들지 않을 것이다. 오히려 목록을 채우는 적절한 요청을 알고있는 새로운 제품 (예 : GET / 카테고리, GET / sales_users 등) 추가를 처리하는 양식을 앱에 작성하려고합니다.


3

영업 사원 목록이 상대적으로 정적 인 것으로 가정하면 /salesusers한 번만 호출 하고 (양식로드 등) 별도의 API 호출 을 원할 것이므로 각 데이터를 다시 요청할 필요가 없습니다. 시각. REST에서는 리소스를 중심으로 API를 구성하고 있으며 영업 사원은 리소스를 제품과 논리적으로 분리합니다.

/product/new마찬가지로을 호출 할 때 sales_user id를 포함하여 새 제품에 대한 데이터 만 제출하려고합니다. sales_user 자체에 대한 변경은 별도의 호출입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.