워드프레스를 REST API 의 백엔드로 활용하는 전략은 굉장히 유용합니다.
여러 프론트앤드 프레임웍에서 백엔드가 REST API 로써의 역할을 수행하길 바라는데, 워드프레스는 가장 최적화된 라우팅 도구를 보유하고 있습니다.
바로 WP_API v2 인데요.
Endpoint 를 함수와 매핑하는 과정이 아주 친숙하고 이해하기 편합니다.
몇 달 전에 제작한 중고 악기 거래 사이트인 musicianmarket.co.kr 의 앱에 적용되는 API 를 모두 WP_API 를 이용하여 개발하였는데요.
지난 번 시간에 소개한 msgapi 와 거의 비슷한 루틴대로 개발되었고, 보안상 많은 것을 공유해드리지 못하지만 간단한 샘플을 소개해드리겠습니다.
API 를 통해 중고악기장터의 댓글란의 글들을 리스팅하고 글을 쓰려고 한다면 어떻게 해야할까요 ?
우선 명사와 동사에 주목해 봅니다.
중고악기 / 댓글 / 리스팅한다.
이렇게 큰 줄거리를 정리한 다음, 이것을 바탕으로 네임스페이스를 만듭니다.
used-product / comment / list
1 2 3 4 |
register_rest_route( 'mmkt/v1', '/used-product/comment/list/', array('methods' => 'POST','callback' => 'list_used_product_comment') ); |
이제 네임스페이스와 매핑하는 함수 부분을 코딩하면 됩니다.
여기서는 컨텐츠 ID 를 받아서 커멘트 리스트 오브젝트를 불러와서 뿌려줘야 된다고 생각해야겠죠.
그러면 ID 를 넘겨서 배열을 리턴하는 식이 될 것 같습니다.
뮤지션마켓의 경우 kboard 를 이용하게 서비스 기능들을 구현했기 때문에 가능하면 kboard 자체의 함수나 구조를 재활용하는 편이 좋습니다.
아래의 코드는 kboard 코드 분석을 해서 KB***** 로 시작하는 Object 들을 찾아 재활용가능한 부분을 불러서 사용한 예시입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
function list_used_product_comment($request){ global $wpdb, $comment_list; $content_uid = $request['content_uid']; $commentList = new KBCommentList(); $commentList->initWithUID($content_uid); $arr_rs = json_decode(json_encode($commentList->resource), true); $new_rs = array(); foreach($arr_rs as $r){ if($r['uid']){ $comment_list = array(); $depth = 0; get_comment_list($r['uid'],$depth); $r['comment_list'] = $comment_list; $new_rs[] = $r; } } return $new_rs; } |
그 외에도 뮤지션마켓의 앱을 구현하기 위해서는 수많은 기능들이 필요해집니다.
댓글을 입력하거나, 삭제하거나, 채팅창을 열거나 대화하거나 하는 부분들이 필요해질텐데.
이런 부분들을 네임스페이스를 지정해서 계층적 규칙에 맞추어 구조적으로 펼쳐두면 이해하기도 쉽고,
라우팅 구조도 깔끔해서 REST API 문서를 제작할 때 흐뭇한 마음이 드실 겁니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
...... register_rest_route( 'mmkt/v1', '/used-product/comment/list/', array('methods' => 'POST','callback' => 'list_used_product_comment') ); register_rest_route( 'mmkt/v1', '/used-product/comment/add/', array('methods' => 'POST','callback' => 'add_used_product_comment') ); register_rest_route( 'mmkt/v1', '/used-product/comment/del/', array('methods' => 'POST','callback' => 'del_used_product_comment') ); register_rest_route( 'mmkt/v1', '/chat/new/', array('methods' => 'POST','callback' => 'new_chat') ); register_rest_route( 'mmkt/v1', '/chat/talk/', array('methods' => 'POST','callback' => 'talk_chat') ); register_rest_route( 'mmkt/v1', '/chat/all/', array('methods' => 'POST','callback' => 'all_chat') ); register_rest_route( 'mmkt/v1', '/chat/thread/', array('methods' => 'POST','callback' => 'thread_chat') ); .... |
프론트 엔드가 vue.js 나 react.js 심지어 서비스 엔진이 php 가 아닌 nodejs 로 운영하더라도, 백엔드 만큼은 워드프레스의 WP_API2 가 너무 좋은 부분은 이 라우팅 구조의 설계와 표현방식에 있어요.
DB 접근성, 그리고 캐시기능 , 그외 파일 시스템이나 네트워킹. 많은 부분에서 여전히 php 가 nodejs 보다는 레퍼런스가 많고 커뮤니티의 도움을 받기 수월한 부분이 있습니다.
프로그래머 입장에서 어떤 것을 선택하는데 있어서 가장 중요한 것은 Reliable 신뢰성인데, WP_API 는 이런 신뢰성을 완벽하게 보장하고 있습니다.
워드프레스가 하나의 화면을 그리는 과정에 많은 프로세스를 걸쳐서 부담되신다면, WP_API 만을 사용하기 위해 인스톨 해보는 것도 나쁘지 않을 것 같네요.