Explorar el Código

Refactor API patterns

Andrea Fazzi hace 5 años
padre
commit
88ef61cac7
Se han modificado 1 ficheros con 16 adiciones y 9 borrados
  1. 16 9
      handlers/handlers.go

+ 16 - 9
handlers/handlers.go

@@ -6,6 +6,7 @@ import (
 	"io/ioutil"
 	"log"
 	"net/http"
+	"path"
 	"path/filepath"
 	"runtime/debug"
 	"strconv"
@@ -76,7 +77,7 @@ func (pp PathPattern) Path(model string) string {
 	return fmt.Sprintf(pp.PathPattern, model)
 }
 
-// Generate CRUD handlers
+// Generate CRUD handlers for models
 func generateHandler(r *mux.Router, model string) {
 	var (
 		patterns []PathPattern = []PathPattern{
@@ -87,13 +88,7 @@ func generateHandler(r *mux.Router, model string) {
 			PathPattern{"/%s/{id}/delete", "/%s?format=html&tpl_layout=base&tpl_content=%s", []string{"DELETE"}},
 		}
 
-		apiPatterns []PathPattern = []PathPattern{
-			PathPattern{"/api/%s", "", []string{"GET"}},
-			PathPattern{"/api/%s/{id}", "", []string{"GET"}},
-			PathPattern{"/api/%s/add/", "", []string{"GET", "POST"}},
-			PathPattern{"/api/%s/{id}/update", "", []string{"GET", "POST"}},
-			PathPattern{"/api/%s/{id}/delete", "", []string{"DELETE"}},
-		}
+		apiPatterns []PathPattern
 
 		executePatterns []PathPattern = []PathPattern{
 			PathPattern{"/%s/{id}/execute", "", []string{"GET"}},
@@ -103,10 +98,21 @@ func generateHandler(r *mux.Router, model string) {
 			PathPattern{"/%s/{id}/files/{filename}", "", []string{"GET"}},
 		}
 	)
+
+	// Generate API patterns prefixing "api" path
+
+	for _, p := range patterns {
+		apiPatterns = append(apiPatterns, PathPattern{path.Join("api", p.PathPattern), "", []string{"GET"}})
+	}
+
+	// Install standard paths
+
 	for _, pattern := range patterns {
 		r.Handle(pattern.Path(model), jwtCookie.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
 	}
 
+	// Install api paths
+
 	for _, pattern := range apiPatterns {
 		r.Handle(pattern.Path(model), jwtHeader.Handler(recoverHandler(modelHandler(model, pattern)))).Methods(pattern.Methods...)
 	}
@@ -144,9 +150,11 @@ func Handlers() *mux.Router {
 	}
 
 	// Token handling
+
 	r.Handle("/get_token", tokenHandler())
 
 	// Static file server
+
 	r.PathPrefix("/").Handler(http.FileServer(http.Dir("./dist/")))
 
 	return r
@@ -286,7 +294,6 @@ func modelHandler(model string, pattern PathPattern) http.Handler {
 
 		case "DELETE":
 			delete(w, r, model, pattern)
-			break
 		}
 	}