Hyperlinking our API
각 요소들의 관계를 다루는것은 우리의 웹 API 디자인에서 조금 더 어려운 부분입니다.
관계를 표현하기 위해서 선택할수 있는 여러가지 다른 방법들이 존재합니다.
- primary key 사용하기
- entities 간 하이퍼링크 해주기
- 고유한 slug 필드를 관계된 entity 에 사용해주기
- 관계된 entity 의 기본 문자열 표현 사용하기
- 부모 표현 안에 관계된 entity 네스팅 해주기
- 기타 다른 사용자 정의 표현
REST Frmaework 은 이 모든 스타일들을 지원합니다. 그리고, 순방향 혹은 역방향 관계들에 적용할수 있습니다. 혹은, generic foreign key 와 같은 커스텀 메니저에도 적용될수 있습니다.
이번에 우리는, entity 간에 하이퍼링크를 해주는 스타일을 사용해 볼겁니다.
이를 하기 위해서는, 기존에 존재하던 ModelSerializer
대신에, 우리의 serializer 를 수정하여 HyperlinkedModelSerializer
를 확장해야 합니다.
HyperlinkedModelSerializer
는ModelSerializer
와 차이점이 있습니다.
- 기본값으로 id 필드를 포함하지 않습니다
- HyperlinkedIdentityfield 를 사용하여, url 필드를 포함합니다
- 관계들은
HyperlinkedRelatedField
를PrimaryKeyRelatedFiedl
대신 사용합니다.
우리는 이미 쉽게 존재하는 serializers 를 재작성하여 hyperlinking 을 사용하도록 만들수 있습니다.
snippets/serializer.py
파일을 열고, 아래를 추가해줍니다.
1 | class SnippetSerializer(serializers.HyperlinkedModelSerializer): |
우리가 새로운 highlight 필드를 추가했다는것을 알고 있어야 합니다. 이필드는 snippet-detail 대신에 snippet-highlight URL 패턴을 가르키는것을 제외하고는, url 필드와 같은 타입의 필드 입니다.
우리는 .json
같은, 접미사 url 을 포함하였기 때문에, highlight 필드에 접미사로된 하이퍼링크들은 .html
접미사를 사용하도록 명시해 줍니다.