그누보드5용 함수형 Restful API 정보
그누보드5용 함수형 Restful API첨부파일
본문
개요
그누보드에서는 Restful API 기능을 제공하지 않습니다.
그래서 자주 사용하는 Restful API 기능위주로 간략하게 구현해보았습니다.(100줄이 안됨)
일반적으로 Restful API 는 class 를 이용하여 구현하지만, 그누보드는 class 를 사용하지 않기 때문에
그누보드 사용자들이 쉽게 이해하고 활용할 수 있게 함수를 이용하여 구현하였습니다.
그 이용자엔 저도 포함됩니다. ㅋㅋ
Restful API 기능 요약
1. URL을 통해 파일명과 함수명을 추출
2. 파일명과 함수명을 통해 해당 함수를 호출
3. 함수의 인자로 URL의 마지막 요소를 전달
4. 폴더를 통해 파일을 분류
5. 폴더가 여러층이어도 여러 깊이로 구성 가능
6. 외부 호출용 함수명은 대문자로 시작해야 함(Public 접근 허용처럼 go 인가 rust 인가에서 대문자로 구분하더라구요)
7. 함수의 인자는 1개만 사용 가능
사용법
0. 압축 푸시면 api 폴더가 있는데 이것을 그대로 그누보드 ROOT 폴더에 올리세요
1. 시작폴더 api (이름은 변경 가능 ,변경시 .htaccess 파일내용도 같이 변경해야 함)
2. api 폴더에 index.php , _common.php, .htaccess 파일 있는지 확인
- apache 의 경우 .htaccess 파일을 사용하여 URL을 통해 파일명과 함수명을 추출
- nginx 의 경우 nginx.conf 파일을 사용하여 URL을 통해 파일명과 함수명을 추출
3. 신규페이지 만들기
- api 폴더에 폴더를 생성하고 그안에 php 파일을 생성
- php 파일에 함수를 생성
- 함수명은 대문자로 시작해야 함(외부에서 호출하기 위해)
6. get 으로 호출시 함수의 인자는 1개만 사용 가능 (function Member($data){} 여기에서 $data 로 받음)
7. 함수의 인자는 URL의 마지막 요소를 전달
8. URL을 통해 함수를 호출
9. URL 예시 : http://localhost/api/폴더명/폴더명/폴더명/파일명/함수명/인자
10. URL 예시 : http://localhost/api/폴더명/폴더명/폴더명/파일명/함수명
11. URL 예시 : http://localhost/api/폴더명/폴더명/폴더명/파일명
12. URL 마지막이 파일명일 때는 함수명을 생략하면 Index 함수를 호출
13. lib 폴더는 접근 금지 처리함 공동 라이브러리 넣어쓰세요.
예시
1. api 폴더에 bbs 폴더를 생성
2. bbs폴더에 content.php 파일을 생성
3. content.php 파일에 Index 함수를 생성
4. Index 함수의 인자로 URL의 마지막 요소를 전달
5. URL 예시 : http://localhost/api/bbs/content
6. URL 예시 : http://localhost/api/bbs/content/인자
보안 이슈
1. 보안이 필요한 포지션
가. 외부에서 요청시 api 폴더 안에서만 접근해야 함.
- .htaccess 파일에서 설정
- if (strpos($url, $allowed_path) === 0 && strpos($url, ".." ) === false ){
url 이 특정 문자열로 시작되는지 확인 후, .. 문자열을 이용하여 상위로 올라가는지 검사
2. 보안 점검이 필요한 함수
가. 외부에서 요청시 실행되는 함수
- call_user_func 함수 호출
- 외부에서 호출하는 함수는 대문자로 시작해야 함
나. 외부에서 요청시 실행되는 함수의 인자
- call_user_func_array 함수 호출
- 외부에서 호출하는 함수의 인자는 1개만 사용 가능 / 그외에는 post 로 요청해야 함
3. 보안이 필요한 Get 인자
가. xss 공격을 방지하기 위해 데이터를 저장후 실행 전에 데이터를 검사 (각 페이지에서 처리)
나. sql injection 공격을 방지하기 위해 데이터를 저장후 실행 전에 데이터를 검사 (각 페이지에서 처리)
4. 보안이 필요한 Post 데이터
이하는 페이지용으로 최종호출 되는 함수안에서 각자 처리
압축 파일 여시면
/api/bbs/content.php
파일이 있는데,
사용하시는 그누보드에 폴더체 올리시고
도메인/api/bbs/content/{내용ID}
예를 들어 , 도메인/bbs/content/company 이렇게 하면 회사소개 내용을 json 으로 리턴합니다.
ps. 그런데 동봉된 파일에는 get 방식이 아니라 post 방식으로 되어 있네요.
co_id 에 값을 넣어서 요청하면 결과가 리턴 될것입니다.
폼을 만드시거나, postman 같은 걸로 테스트 하시면 확인가능합니다.
apache 로 개발 중이라 apache로만 테스트 해보았습니다.
nginx 는 설정 nginx.con 파일만 만들어 두었는데, 설정만 변경하시면 아마 되지 않을까 싶네요.
장점은
이래도되나 싶을정도로 간단합니다.
문제점 좀 지적 해주세요. 고치거나 폐기하게
아니면 이놈으로 계속 진도를 빼보겠습니다.
참고로 당연한 것 이겠지만,
속도는 10~30 빠른 답변을 받습니다. 뷰페이지 렌더링이 빠져서 그런것으로 보입니다.
지금은 게시판 목록, 뷰, 댓글까지 변환해놓고있습니다.
svelte kit 프론트도 만들어가면서 하고 있어서 시간이 좀 걸리는데, 만드는데로 올려드리죠.
8
댓글 7개
위의 파일 postman 으로 접속하시면 되는데,
get 이 아니라 post 로 접속하시고 params 값을 co_id : company 하시면 나오실 거에요.
도메인/v1/그누보드 설치
그러니까 최상위는 root 도메인은 프론트접속으로 남겨주시고 v1 폴더에 그누보드 설치하시고
프론트 react, vue, svelte 같은 놈은 노드 서버 실행해서 메인 root 경로로 접속하게 프록시패스 걸어줍니다.
그리고 위의 파일을 적용해서 api 폴더에 restfull api 걸어주시면
프론트에서 서버 api 엔드포인트는 도메인/v1/app/~ 요렇게 호출하면되고
그누보드는 도메인/v1 으로 접근하시면 됩니다. 주로 로그인과 admin 을 사용하게 되겟죠.
결제 페이지 활용할 수도 있겠네요.