6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr

Enviando Tweets via Lazarus + Synapse

Primeiro de tudo você vai precisar da biblioteca Synapse. O legal é que ela não é um componente pra se instalar, então não precisa reconstruir (rebuild) seu Lazarus.

Muitos sites e blogs oferecem uma cópia da biblioteca synapse hospedada no proprio site, sem indicar ou colocar o link para o site original do autor.

O site do outor do synapse é esse: http://www.ararat.cz/synapse/doku.php

Lá você pode baixar a biblioteca original e atualizada dando créditos ao seu autor.

De posse dela, você vai precisar criar um método POST, já que a classe de HTTP da biblioteca não fornece um, mas fornece os meios para que você faça isso. (ela tem get, mas não post, então você terá de fazer o post no dedo, mas é facil).

Coloque dois edits, dois memos e um botão em uma form.


function TForm1.HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
var
  HTTP: THTTPSend;
begin
  HTTP := THTTPSend.Create;
  try

     //para autenticação http simples, usuario
    HTTP.UserName := txtLogin.Text;

    //senha
    HTTP.Password := txtPassword.Text;

    //mando escrever os dados do tweet no documento
    //Pointer(URLData)^ é o conteúdo (pelo menos o primeiro caracter) para onde o ponteiro da string aponta (toda string no lazarus é um ponteiro, igual no Delphi)
    HTTP.Document.Write(Pointer(URLData)^, Length(URLData));
    //digo o mimetype
    HTTP.MimeType := 'application/x-www-form-urlencoded';
    //mando executar o método post com os dados que eu já setei
    Result := HTTP.HTTPMethod('POST', URL);
    //vou para o começo do documento (o documento é um stream)
    HTTP.Document.Seek(0,soFromBeginning);
    //copio para a stream de saida que veio no parametro desse médtodo (já deve estar criada)
    Data.CopyFrom(HTTP.Document, HTTP.Document.Size);
  finally
    //não esqueça: cuidado com os memory leaks
    HTTP.Free;
  end;

end;

procedure TForm1.btSendClick(Sender: TObject);
var

    host: string;
    st: TMemoryStream;

begin

     //url da atualização de status no twitter. Optei por xml porque xml é mais fácil no lazarus, mas também pode ser usado json.
     //tenho medo de json.... deve ser por causa da máscara e da motoserra. :P
    host := 'http://api.twitter.com/1/statuses/update.xml';

  try
     //cria a memory stream
    st:=TMemoryStream.Create;
    //no post, você tem que ter uma variavel=um valor. Na api do twitter, para atualização de status,
    //mtweet é o memo do status
    HTTPpostURL(host, 'status=' + mTweet.Text, st);
    //posiciono o stream de resultado (xml q o twitter me retorna) no inicio
    st.Seek(0,soFromBeginning);
    //mostro no outro memo
    Memo1.Lines.LoadFromStream(st);
  finally
    st.Free;
  end;

end;     

Comentários

  1. Excelente postagem Vitor, valeu :)

    Silvio Clécio

    ResponderExcluir
  2. Valew ^^

    Fiz um também de consulta de CEP com lazarus + synapse, dá uma olhada. Essa é a parte 3 http://vitorrubio.blogspot.com/2010/08/busca-de-cep-com-o-lazarus-parte-3-xml.html

    ResponderExcluir
  3. Muito bom! com base nessa dica consegui fazer um client bem simples para web services com kbmMW, valew!

    sucesso!

    JB

    ResponderExcluir
  4. Obrigado pelo feedback, JB, mas creio que o método que usei para postar no titter não funcione mais agora. Terei que escrever outro artigo usando o novo método de autenticação.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Uso de memória no SQL Server

Busca de CEP com o Lazarus - Parte 1 - UrlEncode

Botão Add This para adicionar seu post em qualquer rede