2016-11-09 2 views
1

현재 Slim Framework v3 for PHP를 사용하여 자체 REST API를 빌드하는 방법을 배우고 있습니다. 몇 가지 자습서를 발견하고 MySQL 데이터베이스에 GET 및 POST 요청을 보내도록 여러 경로를 구축 할 수있었습니다.Slim Framework v3 - REST API - 삭제

다음은 나를위한 삭제 요청입니다. 나는 다음과 같은 코드 조각을 보여 주었다 튜토리얼 발견

$app->delete('/todo/[{id}]', function ($request, $response, $args) { 
    $sth = $this->db->prepare("DELETE FROM tasks WHERE id=:id"); 
    $sth->bindParam("id", $args['id']); 
    $sth->execute(); 
    $todos = $sth->fetchAll(); 
    return $this->response->withJson($todos); 
}); 

미리 내 삭제 경로를 만들어을 (입니다 이러한 용어의 올바른 사용?) 나는 아무 것도 반환하지 않은 것을 제외하고, 거의 같은. 이 코드 조각은 나를 궁금해하게했다. 삭제 요청이 어떤 것을 반환하는 것이 "공통적 인"것인가? 내 이해 에서이 요청은 테이블 "작업"에서 다른 모든 항목을 반환하는 것입니다 - 그 좋은 연습인가요? 삭제 요청이 무언가를 반환하면 일반적으로 "좋은"관행인가? 그렇다면 : 무엇? 나는 가장 일반적인 관행에 적응하려고 노력하고있다.

사이드 노트 : 나는 이와 같이 인용 된 요청을 사용하려했기 때문에 평소처럼 뭔가 삭제할 수있었습니다. 그러나 아무것도 반환하지 않습니다.

오류는 다음과 같다 :

[...] 
 
     <h1>Slim Application Error</h1> 
 
     <p>The application could not run because of the following error:</p> 
 
     <h2>Details</h2> 
 
     <div> 
 
      <strong>Type:</strong> PDOException 
 
     </div> 
 
     <div> 
 
      <strong>Code:</strong> HY000 
 
     </div> 
 
     <div> 
 
      <strong>Message:</strong> SQLSTATE[HY000]: General error 
 
     </div> 
 
     <div> 
 
      <strong>File:</strong> /www/htdocs/src/routes.php 
 
     </div> 
 
     <div> 
 
      <strong>Line:</strong> 68 
 
     </div> 
 
[...]

선 (68)는 제 경우에 "$ = $ sth-> fetchAll 수행 할 작업();".

"우수 사례"와 관련하여 다른 질문을 추가하려면 : 삭제 요청을 통해 부여 된 ID가 존재하는지 여부를 확인하고 싶습니다. - 라우팅에 포함시킬 것인가 (존재하는 경우 확인) ? 아니면 그런 수표를위한 또 다른 연습이 있습니까?

고마워요.

답변

1

삭제 요청이 결과를 반환하는 것이 일반적입니까?

삭제 요청이 무언가를 반환하는 경우 일반적으로 "우수"한 관행인가? 예일 경우 : 무엇? 가장 일반적인 방법 인 에 적응하려고합니다.

나는 뭔가를 반환해야한다고 말하고 싶습니다. 은 다른 클라이언트와 마찬가지로 작동하므로 API 클라이언트가 이라는 특정 엔터티에 대해 프로 시저를 삭제하면 해당 엔터티가 실제로 삭제되었는지 여부를 알고 싶어합니다. 따라서 뭔가를 돌려 주어야합니다.

어떻게 반환해야합니까?

참고로 이것은 단지 제 의견입니다.

일반적으로 REST API는 프로토콜 (HTTP)에 "바인딩"되어 있으며 HTTP는 요청 결과를 표시하는 훌륭한 옵션 인 상태 코드를 제공합니다. 200 OK, 404 Not Found, 500 Internal Server ErrorHere is the reference for HTTP codes입니다.

API를 잘 모르는 개발자라도 적절하게 사용한다면 해당 내용을 이해하고 그에 따라 행동 할 것입니다. 작동, 나는 다음과 같은 코드를 사용하는 것 "이 ID로 엔티티를 삭제"를

:

  • 404 Not Found : 데이터베이스에이 ID를 가진 어떤 실체가없는 경우;
  • 400 Bad Request : URL의 ID가 유효하지 않은 경우 (즉, 양의 정수가 아닌 경우). 또는 실제로이 시나리오에 대해 404를 사용할 수 있습니다.
  • 500 Internal Server Error : 면에이 실패합니다. 데이터베이스 작업과 마찬가지로 실패합니다.
  • 200 OK : 삭제 작업이 성공한 경우.

경험이있는 웹 개발자는이 코드를 잘 알고 있으므로 쉽게 결과를 이해할 수 있습니다.

이 요청은 다른 모든 항목을 "작업"테이블에서 반환한다고 가정합니다. 좋은 습관입니까?

아니요. 이 요청은 "이 작업 삭제" 프로 시저를 호출하며이 특정 작업의 결과 만 반환해야합니다. 예를 들어, PDO를 가져 가라. "DELETE FROM tasks WHERE id=:id"으로 전화 할 때, 작업이 성공했는지를 나타내는 부울 값을 반환한다. 테이블에서 다른 레코드를 리턴하지 않습니다. 그래서 여기에 같은 간단한 논리를 적용하십시오.

관련 문제