Advertisement
Guest User

server.go

a guest
Mar 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.02 KB | None | 0 0
  1. // Problème: Créer un server reast-api le plus simple, lisible et propre possible. Faire quelque chose de basique (le serveur rest-api étant quelque chose de petit (micro service par exemple) qui ne demande pas beaucoup en compléxité.
  2.  
  3. // Ma dernière réfléxion:
  4. // Ne pas se dire qu'on créer un Server, mais simplement un Handler, donc on supprime le field http.Server de notre structure, et la fonction New retourne le Handler. Libre a l'utilisateur de construire son http.Server, et utiliser notre Handler dessus.
  5.  
  6. // Exemple et remarques (dans le cas ou je garder une structure Server, et non Handler).
  7.  
  8. type Server struct {
  9.     http.Server
  10.  
  11.     // des fields en plus
  12.     cfg   Config
  13.     db    DB
  14. }
  15.  
  16. // Je n'aime pas trop cette fonction NewServer, car potentiellement il y a beaucoup de choses à mettre dans le
  17. // serveur, et ca plus trop propre. Mais du coup, je ne sais pas ou déplacer le set du Handler.
  18.  
  19. // J'aimerais pouvoir construire mon Server directement (mettre les fields en exportable).
  20.  
  21. func NewServer(addr string, cfg Config, db DB, tls *tls.Config) *Server {
  22.     s := &Server{
  23.         Server: http.Server{
  24.             Addr:      addr,
  25.             TLSConfig: tls,
  26.         },
  27.         cfg: cfg,
  28.         db:  db,
  29.     }
  30.     s.Server.Handler = s.Handler()
  31.     return s
  32. }
  33.  
  34. func (s *Server) Handler() http.Handler {
  35.     router := mux.NewRouter().StrictSlash(true)
  36.     router.HandleFunc("/", s.HandleIndex).Methods("GET")
  37.     return router
  38. }
  39.  
  40. // Si j'ai supprimé la fonction NewServer, peut etre mettre le Handler ici pour que ce soit automatique.
  41. // Mais du coup ca veut dire qu'on peut aussi lancer le serveur sans que le Handler soit set (si on appelle les fonctions du http.Server contenu dans le Server).
  42.  
  43. func (s *Server) ServeTLS(certFile, keyFile string) error {
  44.     log.Info("server starting", log.Fields{"server": "fileserver", "host": s.Server.Addr})
  45.     err := s.ListenAndServeTLS(certFile, keyFile)
  46.     return err
  47. }
  48.  
  49. func (s *ServerEnroll) HandleIndex(w http.ResponseWriter, req *http.Request) {
  50.     w.WriteHeader(http.StatusOK)
  51.     json.NewEncoder(w).Encode("Connected")
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement