환경변수 PATH_INFO 활용
오늘에서야 알게된 PATH_INFO라는 환경 변수 사용하기
API를 제공하는 입장에서 여러가지 형태의 출력을 제공해야 하는 경우가 빈번하다.
기본적으로 csv나 json, xml을 제공해야 하는데
프로세서를 세개띄우고
api.csv.fcgi
api.json.fcgi
api.xml.fcgi
각각 서비스를 할수도 있지만
굳이 이렇게 하지 않아도 아래와 같은 방법으로 처리가 가능한다.
url을 보면
api.fcgi?q=string
라고했을때
fcgi와 ?사이에 문자열을 입력하면
PATH_INFO 라는 환경변수에 저장이 된다.
이것을 이용하면 process를 하나만 실행시키고 PATH_INFO를 파싱해서 출력 포맷을 변경할수 있다.
아래 함수는 PATH_INFO를 파싱하는 함수이다.
void split_path_info( char *path_info, char *appname, char *appext )
{
char pathinfo[1024], temp[1024], *p, *token, *bp;
if( getenv("PATH_INFO") == NULL )
strcpy( pathinfo, "/tgrinder.json");
else{
strncpy( pathinfo, getenv("PATH_INFO"), 1020 );
pathinfo[1024]='\0';
}
if(( p = strrchr( pathinfo, '/' )) != NULL )
{
*p = '\0'; p++;
strcpy( path_info, pathinfo );
strcpy( temp, p );
if(( token = strtok_r( temp, "." , &bp )) != NULL )
{
strcpy( appname, token );
if(( token = strtok_r( NULL, "." , &bp )) != NULL )
strcpy( appext, token );
else
strcpy( appext, DEFAULT_EXT );
}
else
strcpy( appname, DEFAULT_APPNAME );
}
}