{"subject_id":"3a3cc48d00998115bae3e2cebba10aeb","topico":"REST: restrições, HATEOAS, Richardson; GraphQL: query/mutation, over/under-fetching","stems":["A respeito de arquitetura de software, julgue os itens que se seguem.","Acerca das tecnologias que atendem a PDPJ-Br, julgue os próximos itens.","A equipe de TIC do BCB necessita desenvolver uma API a ser utilizada em uma solução que o BCB vem desenvolvendo e que será disponibilizada pelo órgão. Como requisitos, tal API deve apresentar: solicitações gerenciadas por HTTP; possibilidade de os clientes solicitarem recursos em qualquer ordem; e isolamento de cada solicitação em relação às outras solicitações. Considerando a situação hipotética anterior, julgue os itens que se seguem, relativos a RESTful e GraphQL.","A respeito de tecnologias de integração, julgue os próximos itens.","A respeito de tecnologia de integração com RESTful, julgue os itens a seguir.","Julgue os próximos itens, a respeito de domain-driven design, design patterns, emergent design, enterprise content management e REST.","Acerca de REST e DHCP, julgue os itens que se seguem.","Em relação a desenvolvimento de aplicativos, julgue os seguintes itens.","Com relação à interoperabilidade de sistemas, julgue os itens subsequentes.","A Arquitetura Orientada a Serviços (SOA), no cenário dos modelos arquiteturais modernos, enfatiza o reúso como elemento chave para a maximização dos resultados em tecnologia da informação. A catalogação e a gerência dos ativos de software da organização na condição de serviços de aplicativos são os pilares em meio aos quais devem se sustentar essa nova arquitetura. A esse respeito, julgue os próximos itens."],"questions":[{"id":"3a44a2485cab","number":59,"stem":0,"statement":"Nos web services RESTful, os dados são retornados exclusivamente no formato XML.","answer":"E","source":{"slug":"TRT10_24","ano":2024},"explanation":{"verdict_reason":"REST não prescreve formato de representação: o recurso pode ser devolvido em JSON, XML, HTML, texto puro, CSV ou binário, e a escolha é feita por negociação de conteúdo, com o cliente indicando o que aceita no cabeçalho Accept e o servidor informando o que enviou no Content-Type. Na prática JSON predomina, mas nem ele é obrigatório — e XML exclusivo é característica do SOAP, não do REST.","distortion_type":"generalizacao","distorted_span":"exclusivamente no formato XML","corrected_statement":"Nos web services RESTful, os dados podem ser retornados em diversos formatos, como JSON, XML, HTML ou texto puro, conforme a negociação de conteúdo.","concept":"REST não fixa formato de representação","citation":"RFC 9110, seção 12","trap_note":"Quem obriga XML é o SOAP, cujo envelope é XML por definição. Sempre que um item impuser formato único ao REST — exclusivamente JSON serve igualmente —, o erro está na exclusividade."}},{"id":"7b2dc6106d51","number":69,"stem":1,"statement":"As API RESTful devem ter uma comunicação statefull entre cliente e servidor, na qual as informações do cliente são armazenadas entre solicitações GET distintas.","answer":"E","source":{"slug":"CNJ_24","ano":2024},"explanation":{"verdict_reason":"A regra é a oposta: API RESTful deve ser stateless, e é justamente isso que proíbe o servidor de guardar informações do cliente entre solicitações. Qualquer contexto necessário viaja na própria requisição — em cabeçalho, token ou parâmetro —, nunca em sessão mantida no servidor entre dois GET.","distortion_type":"inversao","distorted_span":"devem ter uma comunicação statefull entre cliente e servidor","corrected_statement":"As API RESTful devem ter uma comunicação stateless entre cliente e servidor, na qual as informações do cliente não são armazenadas entre solicitações GET distintas.","concept":"REST é stateless por restrição","citation":null,"trap_note":"Stateless é a restrição do REST cobrada com mais frequência, e a inversão vem sempre com a mesma pista: menção a sessão, a contexto guardado ou a informação preservada entre chamadas. Ao ver qualquer dessas palavras associada a REST, marque errado."}},{"id":"e8f7999f0f96","number":89,"stem":2,"statement":"Na situação em apreço, caso seja necessário que a API consulte dados em uma base de dados relacional compatível com a linguagem SQL, poder-se-á utilizar a GraphQL para obter dados nos servidores em questão, uma vez que a GraphQL executa comandos SQL em arquiteturas RESTful diretamente no(s) sistema(s) de gerenciamento de banco de dados (SGBD) atrelado(s) à solução.","answer":"E","source":{"slug":"BCB_24","ano":2023},"explanation":{"verdict_reason":"GraphQL é linguagem de consulta da API, não do banco. O cliente descreve a forma dos dados que quer e o servidor GraphQL executa os resolvedores que ele próprio implementou — e são esses resolvedores que, se for o caso, conversam com o SGBD, com um serviço REST ou com um arquivo. Não existe execução de SQL pela GraphQL diretamente no banco, e o esquema GraphQL não tem relação com o esquema relacional.","distortion_type":"atribuicao_errada","distorted_span":"a GraphQL executa comandos SQL em arquiteturas RESTful diretamente no(s) sistema(s) de gerenciamento de banco de dados (SGBD) atrelado(s) à solução","corrected_statement":"Na situação em apreço, caso seja necessário que a API consulte dados em uma base de dados relacional compatível com a linguagem SQL, poder-se-á utilizar a GraphQL, uma vez que a camada de resolvedores implementada no servidor GraphQL é que acessa o(s) sistema(s) de gerenciamento de banco de dados (SGBD) atrelado(s) à solução.","concept":"GraphQL consulta a API, não o SGBD","citation":null,"trap_note":"Pergunte sempre de quem é a camada. GraphQL fica entre o cliente e o servidor de aplicação; SQL fica entre a aplicação e o banco. Item que faça uma linguagem de API falar direto com o SGBD pulou uma camada inteira."}},{"id":"8d46496a97f2","number":90,"stem":2,"statement":"Caso seja utilizada a arquitetura RESTful, a citada API, além de atender aos requisitos descritos, será stateless, ou seja, o servidor completará cada solicitação do cliente independentemente de todas as solicitações anteriores, e todas as solicitações serão separadas e desconectadas entre si.","answer":"C","source":{"slug":"BCB_24","ano":2023},"explanation":{"verdict_reason":"Ausência de estado é restrição obrigatória do estilo REST, e é ela que produz os três requisitos do enunciado: como cada requisição carrega tudo o que é preciso para ser entendida, o servidor não guarda contexto entre chamadas, o cliente pode pedir os recursos em qualquer ordem e cada solicitação fica isolada das demais. As três exigências descritas são consequência direta do stateless, não um acréscimo a ele.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"stateless: cada requisição é autocontida","citation":"Fielding, Architectural Styles and the Design of Network-based Software Architectures, cap. 5","trap_note":"Stateless é ausência de estado de sessão no servidor, não ausência de estado no sistema. O recurso continua tendo estado persistido; o que não existe é memória da conversa anterior."}},{"id":"5924fc6d85e5","number":119,"stem":3,"statement":"Em um serviço RESTful, todos os métodos são identificados pela mesma URL, sendo cada método acionado por uma porta específica.","answer":"E","source":{"slug":"BANRISUL_22","ano":2022},"explanation":{"verdict_reason":"É o contrário em duas frentes. Cada recurso tem o seu próprio identificador, de modo que não existe URL única para todos os métodos, e o que distingue uma operação da outra é o método HTTP — GET, POST, PUT, PATCH, DELETE —, não a porta. A porta permanece a mesma para todo o serviço, tipicamente 443 em HTTPS ou 80 em HTTP.","distortion_type":"troca_de_termo","distorted_span":"todos os métodos são identificados pela mesma URL, sendo cada método acionado por uma porta específica","corrected_statement":"Em um serviço RESTful, cada recurso é identificado por uma URL própria, sendo cada operação acionada por um método HTTP específico.","concept":"a operação vem do verbo HTTP, não da porta","citation":null,"trap_note":"Porta é escolha de transporte, não de semântica. Sempre que um item fizer a porta selecionar operação, funcionalidade ou perfil de acesso dentro de um mesmo serviço, ele trocou a camada de transporte pela camada de aplicação."}},{"id":"9666f56aeaf5","number":99,"stem":4,"statement":"Webservices possibilitam tanto a recuperação do estado atual de um recurso quanto a exclusão do recurso.","answer":"C","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"A interface uniforme do REST atribui a semântica da operação ao método HTTP: GET recupera a representação do estado atual do recurso e DELETE solicita a sua remoção, além de POST criar e PUT e PATCH atualizarem. As duas capacidades citadas são exatamente dois dos métodos do conjunto padrão.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"o verbo HTTP carrega a operação","citation":"RFC 9110, seção 9","trap_note":"Guarde a correspondência com o CRUD: POST cria, GET lê, PUT e PATCH atualizam, DELETE remove. Quase todo item de operação em web service RESTful se resolve nessa tabela."}},{"id":"40f9f00474f2","number":100,"stem":4,"statement":"A arquitetura RESTful não possibilita o uso de servidores intermediários, chamados de balanceadores de carga, razão por que o cliente sempre se conecta ao servidor final.","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Sistema em camadas é uma das restrições do próprio estilo REST: o cliente não pode saber se está falando com o servidor de origem ou com um intermediário, e é isso que autoriza proxies, gateways, caches e balanceadores de carga no caminho. O item nega justamente a restrição que existe para permitir esses intermediários.","distortion_type":"inversao","distorted_span":"A arquitetura RESTful não possibilita o uso de servidores intermediários","corrected_statement":"A arquitetura RESTful possibilita o uso de servidores intermediários, chamados de balanceadores de carga, razão por que o cliente nem sempre se conecta ao servidor final.","concept":"sistema em camadas admite intermediários","citation":"Fielding, cap. 5.1.6","trap_note":"Decore as restrições do REST pelo que cada uma autoriza: cliente-servidor separa responsabilidades, stateless permite escalar, cache permite reaproveitar resposta, camadas permitem intermediários, interface uniforme padroniza e código sob demanda é a única opcional. Item que proíba algo que uma restrição existe para permitir está invertido."}},{"id":"253aceb11928","number":101,"stem":4,"statement":"As interações acontecem sem controle de estado, o que é conhecido como stateless.","answer":"C","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"Stateless quer dizer que o servidor não mantém contexto de sessão entre chamadas: cada requisição chega autocontida, com autenticação e parâmetros próprios, e é atendida como se fosse a primeira. Guardar o estado da conversa é responsabilidade do cliente, e é isso que permite atender uma mesma sequência de chamadas em instâncias diferentes atrás de um balanceador.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"interações sem controle de estado no servidor","citation":null,"trap_note":"Não confunda stateless com ausência de autenticação. O token vai em cada requisição justamente porque o servidor não guarda sessão — é o mecanismo que torna o stateless viável, não uma exceção a ele."}},{"id":"137b6dd489ba","number":102,"stem":4,"statement":"O protocolo de comunicação HTTP e a identificação de recursos podem ser utilizados por meio de URL (uniform resource locator).","answer":"E","source":{"slug":"SERPRO_21","ano":2021},"explanation":{"verdict_reason":"No REST o identificador do recurso é o URI, e não o URL. O URL é apenas a espécie de identificador que informa também a localização e o mecanismo de acesso; o estilo se define pela identificação do recurso por um identificador uniforme, categoria mais ampla que abrange ainda o URN. O item troca o gênero pela espécie ao expandir a sigla.","distortion_type":"troca_de_termo","distorted_span":"URL (uniform resource locator)","corrected_statement":"O protocolo de comunicação HTTP e a identificação de recursos podem ser utilizados por meio de URI (uniform resource identifier).","concept":"recurso é identificado por URI","citation":"RFC 3986","trap_note":"Quando o item expande a sigla entre parênteses, a expansão é o alvo. URI é o identificador, URL é o identificador que também localiza e URN é o que apenas nomeia. Em REST, a palavra da especificação é URI."}},{"id":"b10808880462","number":96,"stem":5,"statement":"Em um web service REST que gerencie alguns tipos de serviço, os conflitos decorrentes de recursos que tenham identificadores iguais são automaticamente resolvidos no web service.","answer":"E","source":{"slug":"SLU_DF_19","ano":2019},"explanation":{"verdict_reason":"REST não tem mecanismo algum de resolução automática de conflito. O identificador de recurso é único por definição, de modo que dois recursos distintos não compartilham identificador; e quando há conflito de fato — atualização concorrente sobre o mesmo recurso, criação de algo que já existe —, quem o detecta e o trata é a aplicação, que sinaliza a situação com o código 409 Conflict, eventualmente apoiada em controle otimista com ETag e If-Match.","distortion_type":"generalizacao","distorted_span":"são automaticamente resolvidos no web service","corrected_statement":"Em um web service REST que gerencie alguns tipos de serviço, os conflitos decorrentes de recursos que tenham identificadores iguais devem ser tratados pela aplicação, que os sinaliza com o código de status 409.","concept":"conflito é tratado pela aplicação, com status 409","citation":"RFC 9110, seção 15.5.10","trap_note":"Automaticamente, transparentemente e sem intervenção são palavras de risco: o estilo REST define restrições e semântica, não resolve problema de aplicação sozinho. Procure qual código de status a situação deveria devolver — a existência do código já mostra que a resolução não é automática."}},{"id":"53021f2e97bd","number":115,"stem":6,"statement":"Entre os princípios orientadores a serem seguidos na implantação de uma API RESTful Java inclui-se o stateless, em que cada solicitação do cliente para o servidor deve conter todas as informações necessárias, independentemente das informações armazenadas no servidor.","answer":"C","source":{"slug":"SLU_DF_19","ano":2019},"explanation":{"verdict_reason":"Stateless é uma das restrições obrigatórias do estilo, e a formulação do item é a canônica: cada solicitação carrega tudo o que o servidor precisa para atendê-la, sem depender de estado de sessão ali armazenado. Nada disso muda por a implementação ser Java — a restrição é do estilo arquitetural, não da plataforma.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"stateless é princípio do estilo, não da linguagem","citation":null,"trap_note":"Restrição arquitetural independe de linguagem e de framework. Quando o item pendura REST em Java, .NET ou Node, a menção à plataforma é ruído: julgue apenas a afirmação sobre o estilo."}},{"id":"7a303cb1a708","number":102,"stem":7,"statement":"A linguagem GraphQL é utilizada para consulta a objetos gráficos em bancos de dados relacionais.","answer":"E","source":{"slug":"STM_17_ANALISTA_TECNICO","ano":2017},"explanation":{"verdict_reason":"O graph do nome é o grafo do esquema da API — tipos ligados por campos —, e não grafo armazenado em banco. GraphQL é linguagem de consulta para APIs, com esquema fortemente tipado, ponto de entrada único e resposta com exatamente os campos pedidos; ela não consulta objetos gráficos nem se dirige a bancos relacionais. Consulta a grafo armazenado é assunto de banco de dados de grafos, com linguagens como Cypher e Gremlin.","distortion_type":"troca_de_termo","distorted_span":"utilizada para consulta a objetos gráficos em bancos de dados relacionais","corrected_statement":"A linguagem GraphQL é utilizada para consulta a dados expostos por APIs, segundo um esquema tipado definido no servidor.","concept":"GraphQL é linguagem de consulta de API","citation":null,"trap_note":"O nome é a isca: GraphQL não tem relação com banco de grafos nem com gráficos. Sempre que a banca explicar uma tecnologia pela tradução literal do nome, desconfie."}},{"id":"c987c9986574","number":74,"stem":8,"statement":"Conexões REST devem conter todas as informações necessárias para que a conexão seja completada.","answer":"C","source":{"slug":"FUNPRESP_16_JUD","ano":2016},"explanation":{"verdict_reason":"É a formulação da restrição de ausência de estado: como o servidor não guarda contexto entre chamadas, cada requisição precisa trazer autenticação, parâmetros e tudo o mais que permita interpretá-la isoladamente. Faltando qualquer dessas informações, o servidor não tem onde buscá-las, porque não há sessão anterior a consultar.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"requisição autocontida","citation":null,"trap_note":"Autocontida e stateless são o mesmo enunciado visto dos dois lados: do lado do cliente, mande tudo; do lado do servidor, não guarde nada. Reconhecer a equivalência resolve os dois formatos de item."}},{"id":"3decd42cb928","number":71,"stem":9,"statement":"Em um Web Service RESTful, cada método é identificado por uma URL única. Assim, quando o servidor recebe uma solicitação, ele identifica de forma inequívoca a operação que será executada.","answer":"C","source":{"slug":"TJDFT_15_SERVIDOR","ano":2015},"explanation":{"verdict_reason":"Na interface uniforme do REST, o recurso é endereçado por um identificador próprio e a operação é dada pelo método HTTP aplicado a ele. Não há, como no SOAP, um único ponto de entrada em que a operação vem escrita no corpo da mensagem: o par identificador mais verbo determina sem ambiguidade o que executar quando a requisição chega.","distortion_type":"correto","distorted_span":null,"corrected_statement":null,"concept":"recurso endereçável identifica a operação","citation":null,"trap_note":"A oposição que a banca explora é REST contra SOAP: em SOAP há um endpoint único e a operação vai no envelope; em REST o endereço identifica o recurso e o verbo identifica a operação. Item que descreva endpoint único em REST está descrevendo SOAP."}}]}