[vc_row][vc_column][vc_column_text]POSTMan 은 정말 괜찮은 테스트 도구 입니다.
https://www.getpostman.com/ 에서 다운 로드 받으면 되는데, Chrome 의 App 으로 나온 버전과 PC Standalone 버전이 있습니다.
Chrome 버전은 deprecate 이기 PC Standalone 버전을 쓰는 편이 좋을 것 같네요.
POSTMan 은 HEADER, GET, POST 를 자유롭게 에디팅해서 테스트로 밀어넣고 그 결과를 빠르게 확인하기 쉬운 인터페이스를 갖추고 있습니다.
API 를 제작할 때나 API 를 이용하는 앱을 개발할 때 모두 POSTMan 이 큰 도움이 됩니다.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]자, 그러면 앱이나 다른 서비스에서 API 를 호출해서 회원가입을 만드는 것을 해 보기로 하죠.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]워드프레스의 REST_API 를 활용하기 위해서는 rest_api_init 을 hook 해야 합니다.
function generate_unique_username( $username ) {
static $i;
if ( null === $i ) {
$i = 1;
} else {
$i++;
}
if ( ! username_exists( $username ) ) {
return $username;
}
$new_username = sprintf( '%s-%s', $username, $i );
if ( ! username_exists( $new_username ) ) {
return $new_username;
} else {
return call_user_func( __FUNCTION__, $username );
}
}
function register_user($request){
global $wpdb;
$creds = array();
$username = $request["username"];
$email = $request["email"];
$password = $request["password"];
$nickname = $request["nickname"];
$ret = array();
if(strlen($password) >=6){
$user_id = email_exists( $email );
if( !$user_id ){
if(!$username){
list($username) = explode('@',$email);
}
$username = generate_unique_username($username);
$s = " wp_create_user( $username, $password, $email ); ";
$user_id = wp_create_user( $username, $password, $email );
if($nickname){
wp_update_user( array( 'ID' => $user_id, 'display_name' => $nickname ) );
}
$ret['id'] = $user_id;
} else {
$ret['code'] = 'user already exist';
$ret['data'] = array("status"=>403);
$ret['message'] = "This User is already exist";
}
} else {
$ret['code'] = 'too short password';
$ret['data'] = array("status"=>403);
$ret['message'] = "Password should be six more";
}
return $ret;
}
이제 add_action 은 특정 시점에 특정 프로그램을 실행하기 위해 필요합니다.
rest_api_init 라는 타이밍에 register_api_hooks 이라는 함수를 실행하는데, 이 함수에는 REST_API 의 permalink 를 핸들링하는 부분이 있습니다.
이 부분이 중요한 라인인데요.
보통 WordPress 를 설치하면 /wp-json/wp/v2/posts 를 하면 설치된 워드프레스의 글 , 그러니깐 post 타입으로 정의된 컨텐츠들을 뿌려주거든요.
register_rest_route 은 wp/v2 처럼 별도로 정의된 REST API 의 route 을 만들어주는 작업이 되는 것이지요.
register_rest_route ‘msgapi/v1’, ‘/user/register/’, POST , register_user
API 의 namespace 를 매핑하는 파트가 첫 번째, 두 번째 파라미터이고요.
3번째는 REQUEST TYPE 을 정의하는 부분이고 마지막 4번 째는 callback 함수를 선언해주는 부분입니다.
이제 register_user 함수 부분을 볼까요 ?
function register_user($request){
global $wpdb;
$creds = array();
$username = $request["username"];
$email = $request["email"];
$password = $request["password"];
$nickname = $request["nickname"];
$ret = array();
if(strlen($password) >=6){
$user_id = email_exists( $email );
if( !$user_id ){
if(!$username){
list($username) = explode('@',$email);
}
$username = generate_unique_username($username);
$s = " wp_create_user( $username, $password, $email ); ";
file_put_contents("/home/msgapi/public_html/log/t.log",$s);
$user_id = wp_create_user( $username, $password, $email );
if($nickname){
wp_update_user( array( 'ID' => $user_id, 'display_name' => $nickname ) );
}
$ret['id'] = $user_id;
} else {
$ret['code'] = 'user already exist';
$ret['data'] = array("status"=>403);
$ret['message'] = "This User is already exist";
}
} else {
$ret['code'] = 'too short password';
$ret['data'] = array("status"=>403);
$ret['message'] = "Password should be six more";
}
return $ret;
}
WP_REST_API 에서는 에러 메세지 코드에 사용되는 파라미터가 code, data, message 이기 때문에, 가급적 비슷하게 만들어 보았고요.
이 부분의 코드는 username email password nickname 을 받아서 wp_users 와 wp_usermeta 에 넣는 작업입니다.
wordpress 는 미리 정의해둔 함수를 사용하여야 합니다.
왜냐하면 다른 플러그인들도 다 유기적으로 엮혀 있기 때문에 이 부분을 $wpdb->query(” insert wp_users .. “) 이런 식으로 회원등록을 할 수도 있겠지만, 그렇게 되면, 다른 플러그인들과 유기적으로 연결된 코드들이 작동하지 않게 될 것입니다.
왜냐하면, 회원 가입과 관련된 플러그인은 wp_create_user 함수 내에 do_action 부분을 add_action 으로 연결하고 있기 때문이지요.
워드프레스 개발의 핵심은 이런 구조적 연결성과 의존성을 이해하는 것입니다.
자, 그러면 POSTMan 으로 회원가입을 만들어 볼까요 ?[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]API 로 회원가입을 하는건 네임스페이스에 파라미터를 규칙에 맞추어 전송하는 작업을 하면 되는데, 이 과정은 PostMan 으로 하면 좀 더 간편합니다.
http://msgapi.wper.kr/wp-json/msgapi/v1/user/register/ POST /wp-json/msgapi/v1/user/register/ HTTP/1.1 Host: msgapi.wper.kr Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache Postman-Token: feb98489-7432-58e1-1fa1-3c42a7dbb154 username=userid1&password=password!%40&email=userid01%40wper.kr&nicename=%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%9C%A0%EC%A0%80
Postman 의 Code 부분을 보면 RAW 파일로 호출 URL 값을 확인할 수 있습니다.
이것을 Angular.js 로 구현하려면
( function() {
var app = angular.module( 'msgAPI', [] );
app.controller( 'MainController', function( $scope, $http ) {
var apiHost = 'http://msgapi.wper.kr/wp-json';
$http.post( apiHost + '/msgapi/v1/token', {
username: 'user01',
password: 'password!@',
email: 'user01@wper.kr',
nickname: '테스트유저'
} )
.then( function( response ) {
console.log( response.data )
} )
.catch( function( error ) {
console.error( 'Error', error.data[0] );
} );
} );
} )();
다음 편에는 회원 로그인과 JWT 인증, Authorization Bearer 에 관한 이야기를 할까 합니다. 기대해주세요.
[/vc_column_text][/vc_column][/vc_row]

