Programing

RESTful 방식으로 유효성 검사 API를 노출하는 방법은 무엇입니까?

lottogame 2020. 11. 22. 18:52
반응형

RESTful 방식으로 유효성 검사 API를 노출하는 방법은 무엇입니까?


저는 일반적으로 RESTful API 디자인의 팬이지만 유효성 검사 API에 REST 원칙을 적용하는 방법을 잘 모르겠습니다.

사용자의 프로필 정보 (이름, 이메일, 사용자 이름, 비밀번호)를 쿼리하고 업데이트하는 API가 있다고 가정합니다. 노출 할 유용한 기능은 유효성 검사 (예 : 주어진 사용자 이름이 유효하고 사용 가능한지 쿼리) 일 것이라고 생각했습니다.

이 경우 리소스는 무엇입니까? 어떤 HTTP 상태 코드 및 / 또는 헤더를 사용해야합니까?

시작으로, 내가 가진 GET /profile/validate쿼리 문자열 PARAMS 반환을 걸립니다 204또는 400유효 또는 무효합니다. 그러나 validate명사가 아닌 동사입니다.


당신이 기술 한 유형은 의미론에서 확실히 더 많은 RPC 스타일이지만 RESTful 방식으로 목표에 도달 할 수 없다는 의미는 아닙니다.

아무 없습니다 VALIDATE그 주위 HTTP 동사, 그래서 얼마나 많은 값이 구조에서 얻을 수있는 전체 API는? 여러분의 이야기는 사용자에게 주어진 사용자 이름을 사용할 수 있는지 여부를 확인할 수있는 기능을 제공하는 데 중점을 둡니다. 이는 간단한 리소스 검색 확인처럼 들립니다 GET: /profile/username/.... 결과가 404이면 이름을 사용할 수 있습니다.

이것이 강조하는 것은 클라이언트 측 유효성 검사가 클라이언트 측이라는 것입니다. 데이터를 서버로 보내기 전에 클라이언트에서 유효성을 검사하는 것은 UI 문제입니다. RESTful 서비스는 클라이언트가 유효성 검사를 수행했는지 여부에 관계없이 엉망이되지 않습니다. 자체 검증 로직에 따라 요청을 수락하거나 거부합니다.

REST는 모든 것을 포괄하는 패러다임이 아니며 클라이언트-서버 통신을 구조화하는 방법만을 설명합니다.


우리도 같은 문제에 직면했습니다. 클라이언트가 유효성 검사를 위해 서버에 연기하도록하는 이유는 일치하지 않는 규칙을 방지하기위한 것입니다. 서버는 리소스에 대한 작업을 수행하기 전에 모든 것을 검증해야합니다. 이러한 규칙을 두 번 코딩하고 동기화되지 않을 가능성이있는 것은 이치에 맞지 않았습니다. 따라서 우리는 REST 개념을 유지하면서 동시에 서버에 유효성 검사를 수행하도록 요청할 수있는 전략을 고안했습니다.

첫 번째 단계는 메타 데이터 서비스 ( GET /metadata/user) 에서 요청할 수있는 메타 데이터 개체를 구현하는 것이 었습니다 . 그런 다음이 메타 데이터 개체는 클라이언트에게 기본적인 클라이언트 측 유효성 검사 (요구 사항, 유형, 길이 등)를 수행하는 방법을 알리는 데 사용됩니다. 우리는 데이터베이스에서 대부분을 생성합니다.

두 번째 부분은 분석이라는 새 리소스를 추가하는 것으로 구성됩니다. 예를 들어 서비스가있는 경우 :

GET /users/100

다음과 같은 새 리소스를 생성합니다.

POST /users/100/analysis

분석 리소스에는 발생한 유효성 검사 오류뿐만 아니라 필요한 경우 관련 될 수있는 통계 정보도 포함됩니다. 우리가 논의한 문제 중 하나는 분석 리소스에 사용할 동사였습니다. 요청시 분석이 생성되고 있으므로 POST 여야한다고 결론을 내 렸습니다. 그러나 GET에 대한 강력한 주장도있었습니다.

이 문제를 해결하려는 다른 사람들에게 도움이되기를 바랍니다. 이 디자인에 대한 모든 피드백을 환영합니다.


REST와 리소스 방향을 혼동하고 있습니다. REST에는 URL에서 동사를 사용할 수 없다는 내용이 없습니다. URL 디자인에 관해서는 일반적으로 가장 자명 한 것을 선택합니다. wheather는 명사 또는 동사입니다.

서비스에 관해서는 업데이트에 사용하는 것과 동일한 리소스를 사용하지만 test쿼리 문자열 매개 변수를 사용 test=1하여 작업이 완료되지 않은 경우 유효성 검사 오류를 반환하는 데 사용할 수 있습니다.

PATCH /profile?test=1
Content-Type: application/x-www-form-urlencoded

dob=foo

... 그리고 응답 :

HTTP/1.1 400 Bad Request
Content-Type: text/html

<ul class="errors">
  <li data-name="dob">foo is not a valid date.</li>
</ul>

REST API에서 유효성 검사를하는 것이 좋습니다. 어쨌든 유효성 검사가 필요하며 클라이언트 측에서는 사용하지 마십시오. 제 경우에는 API에 특수 error_id가 유효성 검사 오류를 나타내는 규칙이 있고 error_details에는이 PUT 또는 POST 호출에 오류가있는 각 분야에 대한 오류 메시지 배열이 있습니다. 예를 들어 :

{
  "error": true,
  "error_id": 20301,
  "error_message": "Validation failed!",
  "error_details": {
    "number": [
      "Number must not be empty"
    ],
    "ean": [
      "Ean must not be empty",
      "Ean is not a valid EAN"
    ]
  }
}

웹 및 모바일 애플리케이션에 동일한 REST API를 사용하는 경우 API를 업데이트하기 만하면 둘 다에서 유효성 검사를 변경할 수있는 기능이 마음에들 것입니다. 특히 모바일 업데이트가 상점에 게시 되려면 24 시간 이상이 걸립니다.

그리고 이것은 모바일 애플리케이션에서 어떻게 생겼는지입니다 : 여기에 이미지 설명 입력

PUT 또는 POST의 응답은 각 필드에 대한 오류 메시지를 표시하는 데 사용됩니다. 이것은 React를 사용하는 웹 애플리케이션의 동일한 호출입니다.여기에 이미지 설명 입력

이렇게하면 200, 404와 같은 모든 REST API 응답 코드가 제대로 작동합니다. 검증이 실패하더라도 PUT 호출은 200으로 응답합니다. 호출이 유효성 검사를 통과하면 응답은 다음과 같습니다.

{
  "error": false,
  "item": {
"id": 1,
"created_at": "2016-08-03 13:58:11",
"updated_at": "2016-11-30 08:55:58",
"deleted_at": null,
"name": "Artikel 1",
"number": "1273673813",
"ean": "12345678912222"
  }
}

당신이 만들 수있는 가능한 수정이 있습니다. Maby는 error_id없이 사용합니다. error_details가 있으면 루프를 반복하고 필드와 이름이 같은 키를 찾으면 오류 텍스트로 그의 값을 같은 필드에 넣으십시오.

참고 URL : https://stackoverflow.com/questions/11676550/how-to-expose-a-validation-api-in-a-restful-way

반응형