2012-10-30 2 views
0

저는 API의 리소스를 꾸준히 구축했지만, RESTful API를 빌드하는 정확한 방법에 대한 많은 연구를 거쳐서 '복잡한'요청을받는 방법의 예를 찾을 수 없었습니다. 예를 들어이것이 올바른 REST 구현입니까?

(인증 키 갱신에 불과하다) 로그인 프로세스의 일부로서, 다음 URI는 클라이언트로 전달됩니다 :

/api/auth/login 

이 URI에 아무런 값이 없습니다는 리소스는 /auth/이고 트리거되는 명령은 /login/입니다. 실제 로그인 세부 사항은 서버 권한 부여 헤더로 보내집니다.

이제이 질문에 대한 질문을 던졌습니다. 클라이언트가 키의 유효 기간을 알려주는 명령을 작성한 것이므로 즉시 명령 이름과 비슷한 getkeyexpiration으로 그려졌습니다. .

갑자기 나는 이것이 6 제약에서 읽은 것처럼 들리지 않는다고 느꼈다. 이것은 조작 호출과 비슷하다고 느낀다.

위 예제를 기반으로해도 여전히 RESTful API입니까? 단순히 URI 리소스 이름과 추가 된 값을 사용하여이 작업을 수행 할 수있는 방법을 생각할 수 없기 때문에 걱정됩니다. 서버가 작동하는 방법의 맥락이된다 http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http 이해하기 시작하고

그 명사 단어 자원과 자원 만 이름을 지정하여이 읽기에서

:

EDIT 감사 훨씬 더 명확 해. 내 위의 예에 대해서는

: 그 자원의 컨텍스트이기 때문에

/api/auth/login 

나는, 로그인의 접두사로 인증 사용했다. 내 시스템을 확장 가능하도록 설계 중이며 URI 수준에서 자원을 분류하는 방법이 필요합니다. 이 작업을 수행하는 표준 방법이 있습니까?

답변

1

HTTP가 동사를 제공하므로 RESTful 리소스는 명사이어야합니다.

나는이 대신 같은 것을 제안 :

/api/key 

어떤 할 수 있습니다 다음 POST에 (HTTP 권한 부여 헤더를 포함하여),이 같은 반환 뭔가 새로운 키를 만듭니다

/api/key/1234ABCDBLAHBLAH 

이를 세션에 고유 한 키입니다. 그런 다음 만료 시간 등과 같은 세부 정보를 검색 할 수 있습니다. 그런 다음 각 요청에 대해 해당 키를 전달해야합니다.

RESTful API의 컨텍스트에서 논의 할 때 핵심 요소가 거슬리는 소리로 들린다면 그것은 일반적으로 그렇기 때문입니다. 세션은 사람/브라우저 개념이지만 RESTful API는 응용 프로그램/통합 개념입니다.

서버는 다른 서버에 "로그온"하지 않으므로 다음과 같은 질문을 던집니다. 호출자가 Auth 헤더를 로그인 API에 전달해야하는 경우 이미 괜찮 으면 API 호출, 그리고 키의 개념을 모두 잊어 버리시겠습니까?

+0

마지막 포인트에서 사용자 (이 경우 시스템 관리자)는 안심할 수있는 API인지 여부에 관계없이 사용자 이름과 비밀번호를 요구합니다. 작동 방식은 사용자 이름을 보내고 한 번 전달하면 서버가 새로 생성 된 키를 사용하여 사용자 인증 테이블을 업데이트 한 다음 클라이언트로 다시 보냅니다. 이때부터 클라이언트는 대신 인증 키를 사용할 수 있습니다 (만료 될 때까지). 모든 요청에 ​​대해 일반 텍스트 사용자 이름과 암호를 보내지 않도록하는 수단입니다. – Flosculus

+0

클라이언트가 키를 확인하는 것이 중요하지 않습니다. 키가 만료되어 클라이언트가 알게되고 다시 로그인해야하는 경우 클라이언트 응용 프로그램 자체에서 자동으로 수행됩니다. api URI는 MVC 라우팅 인/module/resource/action과 유사한 시스템을 따릅니다. 행동은 일종의 하위 자원 일 수 있습니다. 나는 요청이 언젠가 연장 될 수 있는지를 알 수 없기 때문에 URI로 데이터를 보내는 것에 익숙하지 않다. 명명 규칙이 위의 예와 관련하여 유일한 제약 사항입니까? – Flosculus

+0

지금 설명한 것과 비슷한 시스템을 사용하도록 전환했습니다. 감사합니다. – Flosculus

관련 문제