GraphiQL
2024. 12. 16. 18:21ㆍTIL
REST API 문서화를 위한 도구인 SWAGGER를 통해서 회원가입,로그인,이메일 인증 API를 테스트 했다면,
채팅 API의 GraphQL 스키마의 탐색 및 쿼리 테스트 도구를 위해서 GraphiQL을 사용하였다. Apollo Studio는 대규모 프로젝트,팀 협업에 더 적합한 도구이고 초기 설정에 시간이 걸린다는 점 때문에 선택하지 않았다.
의존성 추가
// GraphQL Playground
implementation("com.graphql-java-kickstart:graphql-spring-boot-starter:11.0.0")
implementation("com.graphql-java-kickstart:graphiql-spring-boot-starter:11.0.0")
application.yml
spring: 하위에 작성
graphql:
graphiql:
enabled: true
printer:
enabled: true
schema.graphqls 작성
type Message {
id: ID,
content: String
sender: String
timestamp: String
}
type Mutation {
sendMessage(content: String!): Message
}
type Query {
getMessages: [Message]
}
Securityconfig 해당 경로 추가
.authorizeHttpRequests {
it.requestMatchers(
"/graphql"
).permitAll()
컨트롤러 작성
package hjp.hjchat.domain.chat.controller
import graphql.kickstart.tools.GraphQLMutationResolver
import graphql.kickstart.tools.GraphQLQueryResolver
import hjp.hjchat.domain.chat.dto.MessageDto
import hjp.hjchat.domain.chat.entity.Message
import hjp.hjchat.domain.chat.entity.toResponse
import hjp.hjchat.domain.chat.model.MessageRepository
import org.springframework.graphql.data.method.annotation.Argument
import org.springframework.graphql.data.method.annotation.MutationMapping
import org.springframework.graphql.data.method.annotation.QueryMapping
import org.springframework.stereotype.Controller
@Controller
class ChatController(
private val messageRepository: MessageRepository
) : GraphQLQueryResolver, GraphQLMutationResolver {
@QueryMapping
fun getMessages(): List<MessageDto> {
return messageRepository.findAll().map { it.toResponse() }
}
@MutationMapping
fun sendMessage(@Argument content: String): MessageDto {
println("Saved message: $content")
val savedMessage = messageRepository.save(
Message(content = content)
)
return savedMessage.toResponse()
}
}
로컬에서 테스트 (http://localhost:8080/graphiql)
'TIL' 카테고리의 다른 글
채팅방 생성(유저 초대) 구현 (0) | 2024.12.18 |
---|---|
Sᴘʀɪɴɢ ꜱᴇᴄᴜʀɪᴛʏ와 Sᴘʀɪɴɢ GʀᴀᴘʜQL 통합 (1) | 2024.12.17 |
HJ CHAT 로그인/회원가입 API 작성 (0) | 2024.12.13 |
실시간 채팅 서비스 API 시스템 아키텍처 및 설계 (0) | 2024.12.12 |
𝐆𝐫𝐚𝐩𝐡𝐐𝐋 𝐕𝐒 𝐑𝐄𝐒𝐓 𝐀𝐏𝐈 (0) | 2024.12.11 |