JSON(Serialização/Desserialização) e Rest
Tags: java, javascript, csharp, python
Published: 2020-05-14 11:38:48

#O que é JSON?
---

O que é Json, o que é Rest, como eu faço uma serialização e desserialização de um objeto, todos esses questionamentos iremos abordar nesse artigo. Não sou professor, porém aqui, encontrei uma forma de explicar todo o conhecimento que tenho adquirido em minhas aulas, e tenho repassado a diante neste blog, para ajudar a comunidade, e também reforçar os meus conhecimentos adquiridos através do curso que estou atualmente. 

Bom, o acrônimo de **JSON** é: *Javascript object anotation*, ele nada mais e nada menos que meus objetos sendo trafegados via rede. A todo tempo a web faz a requisição e devolve uma resposta, onde usando os termos **Response** e **Request**. Então para que eu possa enviar meus dados através da rede eu uso o meu **JSON**, e assim, outras aplicações poderão ter acesso a esses dados. O **JSON** ele tem uma particularidade que, o padrão **REST** (*Representation State Transfer*), utiliza, que é a os métodos HTTP. Iremos explicar isso mais para frente! O XML era usado em Webservices para fazer essas transferencias usando o Padrão SOAP. E agora, temos o Rest para fazer isto usando o JSON. A sintaxe do Json é simples! É um de-para, ou algo semelhante a isto. 

```
{
   "Nome": "Raphael",
   "SobreNome": "Pereira",
   "NomePai" : "Almir",
   "NomeMae": "Rozimeire"
}
```

#Padrão Rest
---
#####O que é http? 

O padrão Rest é minha representação de estado de transferência, onde estou trafegando as informações do meu banco de dados via rede, então eu posso fazer requisições a minha aplicação através da rota da minha url (Ou endpoint) e assim será disponibilizado minhas informações. Minha URL definida de acordo com a minha definição ou regra de négocio da aplicação.

Temos os verbos **HTTP** que são: **POST**, **DELETE**, **GET**, **PUT**. Esses são os mais usados, tem outros verbos, porém iremos falar desses 4 carinhas, que formam o chamado "CRUD" (Create, Delete, Update, Read). São eles responsáveis por fazer requisições a minha aplicação. 

O **GET**: Ele busca as informações da minha aplicação, se eu fizer um GET, eu busco e não preciso passar alguma informação. Pois ele só fará uma consulta.

O **POST**: Ele é cara responsável por colocar alguma informação na minha aplicação. Ele vai dizer: "Olha o verbo POST, eu quero adicionar essas informações, toma esse JSON aqui". Então você escreve um **body** e assim você pode colocar essas informações

O **PUT**: Ele é responsável por atualizar as informação da sua aplicação, eu enviei um "POST" para minha aplicação, preciso atualizar, então eu passo faço um "PUT" e ai ele é sincronizado e sua aplicação está atualizada com a nova informação.

**DELETE**: Então é responsavel por fazer uma exclusão de um dado da sua aplicação, basta você passar um ID, que ele busca e faz o delete na base(Banco de dados). Você não faz um update sem where no banco de dados risos, e nem tente risos e nem neste verbo http.


#Serialização e Desserialização
---

####Serialização: 

A serialização é você transformar um objeto da sua classe em um Json, e como você faz isso? Então tem diversas bibliotecas que fazem isso para você! Uma delas é o **NewtonSoft** no meu caso onde estou trabalhando com c#, esta biblioteca é recomendado pela própria microsoft e é que vamos utilizar para serializar e também desserializar um objeto. Quando você acessa o Nuget do vs2019 ou qual seja sua linguagem de programação, você tem disponivel métodos que você pode transformar seu objeto em Json. Exemplo de código igual a este:

```
public void ExportarJson(Cliente cliente)
{
     var json = JsonConvert.SerializeObject(cliente, Formatting.Indented);

     using (var streamWriter = new StreamWriter(path + filename))
     {
        streamWriter.WriteLine(json);
     }
}
```
O meu método recebe uma variável do tipo da classe da minha entidade, onde essa variável terá os meus atributos contido nessa classe, eu usei um variavel json recebendo meu JsonConvert que eu instalei no nuget que pertence a biblioteca do NewtnSoft e ele acessou o método estático **SerializeObject** passando meus argumentos do cliente onde a variável está populada(**contendo as informações preenchida pelo usuário**) e um *formatting.Indented* que faz a identação do objeto para melhor leitura para outro desenvolvedor. Porém não é recomendado, pois aumenta o valor em Byte do arquivo, o ideal é mesmo ser inline, no caso, em uma linha só.

Pronto, esse método é capaz de ler as informações preenchidas e assim fazer o upload para sua máquina, a variavel path é uma constante que tem o caminho pré definido na classe. E assim você pode salvar seus objetos em Json.


####Desserialização:

É o processo inverso, você fará a leitura do arquivo Json e depois irá transformar em um objeto, no caso do cliente você se não tiver essa classe criada com todos os atributos que estão no arquivo Json, você precisa criar e assim chamar o método **DeserializeObject** e fazer a desserialização do arquivo Json para objeto. É um processo mais tranquilo, vou disponibilizar meu código no github para você analisar como é feito todo o processo.

Espero ter ajudado com o mínimo conhecimento que venho adquirindo ao longo do meu curso, eu espero ajudar a comunidade em algo e também fortalecer meus conhecimentos, pois aqui achei a melhor forma de expor todo conhecimento e reforçá-lo!

Muito Obrigado!!


https://github.com/rafadastan
https://www.linkedin.com/in/raphaelaugustopereira/