8.13. 글삭제 API 만들기

목록 페이지에서 글 삭제 버튼을 누르면 개별 글을 삭제하는 API를 만든다.

<?php
header('Content-Type: application/json');

// 로그인 체크
session_start();
if (isset($_SESSION['member_id']) === false){
    echo json_encode(array('result' => false));
    exit();
}

// 파라미터 체크
$post_id = isset($_POST['post_id']) ? $_POST['post_id'] : null;
if ($post_id == null){
    echo json_encode(array('result' => false));
    exit();
}

// DB Require
require_once("inc/db.php");

$member_id = $_SESSION['member_id'];

// 글 삭제. 작성자 체크를 위해 writer_id 도 함께 검사.
$result = db_update_delete("delete from tbl_post where post_id = :post_id and member_id = :member_id",
    array(
        'post_id' => $post_id,
        'member_id' => $member_id
    )
);

echo json_encode(array('result' => $result));

위 코드를 delete.api.php 파일로 저장한다.

HTTP 헤더에 Content-Type: application/json 을 설정할 경우 브라우저가 응답이 JSON 형식임을 직접적으로 알 수 있게 된다.

header('Content-Type: application/json');

delete.api.php 파일은 모든 응답을 JSON 형식으로 한다고 명시한다.


로그인 체크가 실패했을 경우 {result : false} 형태의 JSON 문자열을 웹 브라우저로 응답한다.

echo json_encode(array('result' => false));

PHP 코드 array('result' => false) 를 JSON 형식으로 변경하고(json_encode) 출력하는(echo) 코드다.


실제로 글을 삭제한다.

$result = db_update_delete("delete from tbl_post where post_id = :post_id and member_id = :member_id",
    array(
        'post_id' => $post_id,
        'member_id' => $member_id
    )
);

파라미터는 post_id만 전달되지만 실제로 데이터베이스에 삭제시에는 세션에서 가지고 온 member_id도 함께 조건으로 넣어야 한다. member_id 파라미터 검사가 없다면 로그인한 사용자 아무나 post_id 값만 알고 있다면 다른 사람의 글이라도 삭제할 수 있기 떄문이다. 따라서 본인의 글만 삭제할 수 있도록 조건을 추가한다.


성공 실패 여부를 웹 브라우저에 응답한다.

echo json_encode(array('result' => $result));