本文整理汇总了Golang中lib/server.App.API方法的典型用法代码示例。如果您正苦于以下问题:Golang App.API方法的具体用法?Golang App.API怎么用?Golang App.API使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类lib/server.App
的用法示例。
在下文中一共展示了App.API方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: setupAPIStats
func setupAPIStats(app *server.App) {
var API = app.API()
// --------------------------------------------------------------------------
// Stats
API.GET("/stats/",
server.Handler(func(req *wcg.Request) response.Response {
stats, _ := runtime.Stats(gae.NewContext(req))
json := map[string]interface{}{
"version": lib.Commit,
"timestamp": lib.Timestamp,
"stats": stats,
"environment": lib.CurrentEnvironment(),
"envvars": lib.GetEnvVars(),
}
if _, dsStats, err := entities.DatastoreStat.Get().Key("total_entities_usage").One(req); err != nil {
json["datastore"] = dsStats
}
// use array response for API convention.
return response.NewJSONResponse(
[](map[string]interface{}){
json,
},
)
}))
}
示例2: setupAPIAPITokens
func setupAPIAPITokens(app *server.App) {
var API = app.API()
// --------------------------------------------------------------------------
// APIToken
API.GET("/api_tokens/",
middleware.EntityAll(entities.APIToken.Query()))
API.GET("/api_tokens/:token.json",
middleware.EntityGet(entities.APIToken.Get().Cache(true), "token"))
API.POST("/api_tokens/",
middleware.ParseForm(func(v *validators.FormValidator) {
v.Field("description").Required()
}),
middleware.EntityPost(entities.APIToken.Put()))
API.PUT("/api_tokens/:token.json",
middleware.ParseForm(func(v *validators.FormValidator) {
v.Field("description").Required()
}),
middleware.EntityPut(entities.APIToken.Put(), "token"))
API.DELETE("/api_tokens/:token.json",
middleware.EntityDelete(entities.APIToken.Delete(), "token"))
}
示例3: setupAPIMembers
func setupAPIMembers(app *server.App) {
var API = app.API()
API.GET("/:artist/members/",
handlers.ArtistHandler(
func(req *wcg.Request, artist *hplink.Artist) response.Response {
memberQuery := Member.Query().Order("Index").Filter("ArtistKey=", artist.Key).Cache(fmt.Sprintf(ckAllMembersTemplate, artist.Key))
return middleware.EntityAll(memberQuery)(req)
},
))
API.GET("/:artist/members/:member.json",
handlers.MemberHandler(
func(req *wcg.Request, member *hplink.Member) response.Response {
return response.NewJSONResponse(member)
},
),
)
API.PUT("/:artist/members/:member.json",
handlers.AdminGate,
middleware.ParseForm(func(v *validators.FormValidator) {
v.Field("color").Required()
}),
handlers.MemberHandler(
func(req *wcg.Request, member *hplink.Member) response.Response {
if err := Member.UpdateEntityFromForm(member, req.HTTPRequest().Form); err != nil {
req.Logger.Warnf("UpdateEntityFromForm returns and error: %#v", err)
return response.APIBadRequest(middleware.ErrInvalidFormParameters)
}
Member.Put().Cache(ckAllMembersTemplate).MustUpdate(req, member)
return response.NewJSONResponse(member)
},
),
)
}
示例4: setupAPIGates
func setupAPIGates(app *server.App) {
var API = app.API()
// --------------------------------------------------------------------------
// Gate
API.GET("/gates/",
server.Handler(func(req *wcg.Request) response.Response {
return response.NewJSONResponse(gates.GetAll(req))
}))
API.GET("/gates/:key.json",
server.Handler(func(req *wcg.Request) response.Response {
val := gates.Get(req, req.Param("key"))
if val == nil {
return response.NotFound(req)
} else {
return response.NewJSONResponse(val)
}
}))
API.PUT("/gates/:key.json",
middleware.ParseForm(nil),
server.Handler(func(req *wcg.Request) response.Response {
val := gates.Get(req, req.Param("key"))
if val == nil {
return response.NotFound(req)
} else {
val.UIDs = req.HTTPRequest().Form["uids"]
gates.PutMulti(req, val)
return response.NewJSONResponse(val)
}
}))
}
示例5: setupAPIConfigs
func setupAPIConfigs(app *server.App) {
var API = app.API()
// --------------------------------------------------------------------------
// Sever Config
API.GET("/configs/",
server.Handler(func(req *wcg.Request) response.Response {
return response.NewJSONResponse(configs.GetAll(req))
}))
API.GET("/configs/:key.json",
server.Handler(func(req *wcg.Request) response.Response {
val := configs.Get(req, req.Param("key"))
if val == nil {
return response.NotFound(req)
} else {
return response.NewJSONResponse(val)
}
}),
)
API.PUT("/configs/:key.json",
middleware.ParseForm(func(v *validators.FormValidator) {
v.Field("value").Required()
}),
server.Handler(func(req *wcg.Request) response.Response {
val := configs.Get(req, req.Param("key"))
if val == nil {
return response.NotFound(req)
} else {
val.Value = req.Form("value")
configs.PutMulti(req, val)
return response.NewJSONResponse(val)
}
}))
}
示例6: setupAPIUsers
func setupAPIUsers(app *server.App) {
var API = app.API()
API.GET("/me/",
server.Handler(func(req *wcg.Request) response.Response {
if req.User == nil || request.ByGuest(req) {
return response.NewJSONResponse(nil)
}
return response.NewJSONResponse(req.User)
}))
API.POST("/me/gates/",
server.Handler(func(req *wcg.Request) response.Response {
keys := strings.Split(req.Form("keys"), ",")
result := gates.EvalKeys(req, keys...)
return response.NewJSONResponse(result)
}))
}
示例7: setupAPITasks
func setupAPITasks(app *server.App) {
var API = app.API()
API.GET("/tasks/", server.Handler(
middleware.EntityQuery(
entities.AsyncAPITask.Query().Filter(
"UpdatedAt >=",
request.Value(func(req *wcg.Request) interface{} {
return wcg.ParseDateOr(req.Query("since"), lib.Now().Add(-_TaskExpirationDays))
}),
).Filter(
"UpdatedAt <=",
request.Value(func(req *wcg.Request) interface{} {
return wcg.ParseDateOr(req.Query("until"), lib.Now())
}),
),
),
))
}
示例8: setupAPIIEPGExclusions
func setupAPIIEPGExclusions(app *server.App) {
var AsyncAPI = app.AsyncAPI()
var API = app.API()
API.GET("/iepg/exclusions/", middleware.EntityAll(IEPGExclusion.Query().Cache(_CacheAllIEPGExclusions)))
exclusionTask := AsyncAPI.Define("/iepg/exclusions/task/")
exclusionTask.Queue.Rate = "1/s"
exclusionTask.Queue.MaxConcurrentRequests = "1"
exclusionTask.OnTrigger(middleware.Gate("family"))
exclusionTask.OnMonitor(middleware.Gate("family"))
exclusionTask.OnProcess(server.AsyncTaskHandler(
func(req *wcg.Request, t *models.AsyncAPITask) (*models.AsyncAPITaskProgress, error) {
var list []*pt.IEPG
records := recentRecordsQuery().MustExecute(req).Data.([]pt.IEPG)
for i := range records {
list = append(list, &records[i])
}
if err := applyExclusions(req, list); err != nil {
return nil, err
}
IEPG.PutMulti().Cache(_CacheAllIEPGExclusions).MustUpdate(req, list)
return nil, nil
},
))
API.POST("/iepg/exclusions/",
middleware.Gate("family"),
middleware.ParseForm(func(v *validators.FormValidator) {
v.Field("cid").Required()
v.Field("sid").Required()
v.Field("weekday").Required()
v.Field("title_text").Required()
v.Field("title_text_type").Required()
}),
middleware.EntityPost(IEPGExclusion.Put().Cache(_CacheAllIEPGExclusions)),
)
API.DELETE("/iepg/exclusions/:id.json",
middleware.Gate("family"),
middleware.EntityDelete(IEPGExclusion.Delete().Cache(_CacheAllIEPGExclusions), "id"))
}
示例9: setupAPIArtist
func setupAPIArtist(app *server.App) {
var API = app.API()
API.GET("/",
server.Handler(func(req *wcg.Request) response.Response {
pArtists := entities.Artist.Query().Order("Index").Cache(ckAllArtits).MustExecute(req)
artist := pArtists.Data.([]hplink.Artist)
if req.Query("w") == "members" {
iterator.MustParallelSlice(artist, func(i int, a *hplink.Artist) error {
pMembers := entities.Member.Query().Order("Index").Filter("ArtistKey=", a.Key).Cache(fmt.Sprintf(ckAllMembersTemplate, a.Key)).MustExecute(req)
artist[i].Members = pMembers.Data.([]hplink.Member)
return nil
})
}
return response.NewJSONResponse(artist)
}),
)
API.GET("/:artist/",
middleware.EntityGet(entities.Artist.Get().Cache(true), "artist"))
}
示例10: setupAPIChannels
func setupAPIChannels(app *server.App) {
var API = app.API()
API.GET("/channels/",
middleware.EntityAll(Channel.Query().Cache(_CacheAllChannels)))
API.POST("/channels/",
middleware.Gate("family"),
middleware.ParseForm(func(v *validators.FormValidator) {
v.Field("cid").Required()
v.Field("sid").Required()
v.Field("name").Required()
v.Field("iepg_station_id").Required()
}),
middleware.EntityPost(Channel.Put().Cache(_CacheAllChannels)))
API.DELETE("/channels/:id.json",
middleware.Gate("family"),
middleware.EntityDelete(Channel.Delete().Cache(_CacheAllChannels), "id"))
}
示例11: setupAPIConfigs
func setupAPIConfigs(app *server.App) {
var API = app.API()
API.GET("/configs/:userid/messenger.json",
middleware.Gate("family"),
validateUserID,
requireMessengeOptIn,
server.Handler(
func(req *wcg.Request) response.Response {
_, one := MessengerNotification.Get().Key(req.Param("userid")).UseDefaultIfNil(true).Cache(true).MustOne(req)
return response.NewJSONResponse(one)
},
))
API.PUT("/configs/:userid/messenger.json",
middleware.Gate("family"),
validateUserID,
requireMessengeOptIn,
middleware.ParseForm(nil),
middleware.EntityPutOrCreate(MessengerNotification.Put(), "userid"))
API.POST("/configs/:userid/messenger/notify/",
middleware.Gate("family"),
validateUserID,
requireMessengeOptIn,
server.Handler(
func(req *wcg.Request) response.Response {
content, err := createDailyNotificationContent(req)
if err != nil {
return response.InternalServerError(req, err)
}
err = messenger.NewMessengerClient(req).SendText(content.title + "\n" + strings.Join(content.lines, "\n"))
if err != nil {
req.Logger.Errorf("Failed to notify a message to messenger: %v", err)
}
return response.NewJSONResponse(map[string]interface{}{
"ok": true,
})
},
))
}
示例12: setupAPIStats
func setupAPIStats(app *server.App) {
var API = app.API()
API.GET("/stats/servers/",
middleware.EntityAll(Server.Query()))
API.GET("/stats/nasdisks/",
middleware.EntityAll(NASDisk.Query()))
API.GET("/stats/servers/:server/:stats/",
server.Handler(
func(req *wcg.Request) response.Response {
key, _ := Server.Get().Key(req.Param("server")).Cache(true).MustOne(req)
if key == nil {
req.Logger.Debugf("server %q is not found.", req.Param("server"))
return response.NotFound(req)
}
var kind *entities.Kind
switch req.Param("stats") {
case "system":
kind = SystemStats
break
case "cpu":
kind = CPUStats
break
case "memory":
kind = MemoryStats
break
case "disk":
kind = DiskStats
break
case "filesystem":
kind = FileSystemStats
break
case "network":
kind = NetworkStats
break
default:
req.Logger.Debugf("metric %q is invalid.", req.Param("stats"))
return response.NotFound(req)
}
return execStatsQuery(req, kind.Query().Ancestor(key))
},
))
API.POST("/stats/metrics/",
middleware.APITokenOnly(),
server.Handler(
func(req *wcg.Request) response.Response {
ent, err := SystemMetric.CreateEntitiesFromJSON(req.HTTPRequest().Body)
if err != nil {
return response.BadRequest(req, err)
}
collection := home.NewStatsFromMetrics(ent.([]*home.SystemMetric))
if len(collection) == 0 {
return response.BadRequest(req, fmt.Errorf("No stats are collected."))
}
if collection[0].System.ServerName == "" {
return response.BadRequest(req, fmt.Errorf("server_name is missing"))
}
for _, stats := range collection {
key := getServerKey(req, stats.System.ServerName)
id := fmt.Sprintf("%s.%d", key.StringID(), stats.Timestamp.Unix())
stats.System.ID = id
stats.CPU.ID = id
stats.Memory.ID = id
for _, v := range stats.Disks {
v.ID = fmt.Sprintf("%s.%s.%d", key.StringID(), v.DeviceName, stats.Timestamp.Unix())
}
for _, v := range stats.Networks {
v.ID = fmt.Sprintf("%s.%s.%d", key.StringID(), v.DeviceName, stats.Timestamp.Unix())
}
SystemStats.Put().Parent(key).MustUpdate(req, stats.System)
CPUStats.Put().Parent(key).MustUpdate(req, stats.CPU)
MemoryStats.Put().Parent(key).MustUpdate(req, stats.Memory)
DiskStats.PutMulti().Parent(key).MustUpdate(req, stats.Disks)
NetworkStats.PutMulti().Parent(key).MustUpdate(req, stats.Networks)
}
return response.NewJSONResponse(true)
},
))
API.POST("/stats/filesystem/",
middleware.APITokenOnly(),
server.Handler(
func(req *wcg.Request) response.Response {
ent, err := FileSystemStats.CreateEntitiesFromJSON(req.HTTPRequest().Body)
if err != nil {
return response.BadRequest(req, err)
}
filesystems := ent.([]*home.FileSystemStats)
if filesystems[0].ServerName == "" {
return response.BadRequest(req, fmt.Errorf("server_name is missing"))
}
key := getServerKey(req, filesystems[0].ServerName)
for _, fs := range filesystems {
fs.ID = fmt.Sprintf("%s.%s.%d", fs.ServerName, fs.Name, fs.Timestamp.Unix())
}
FileSystemStats.PutMulti().Parent(key).MustUpdate(req, filesystems)
return response.NewJSONResponse(true)
//.........这里部分代码省略.........
示例13: setupAPIFBMessenger
func setupAPIFBMessenger(app *server.App) {
var API = app.API()
API.GET("/messenger/", messenger.SetupHandler)
API.POST("/messenger/", messenger.WebHookHandler)
}
示例14: setup20161009Backfill
func setup20161009Backfill(app *server.App) string {
const batchSize = 800
const cursorKey = "c"
const path = "/tasks/20161009backfill/"
var API = app.API()
var resolveSettingsURL = func(url string, settingsList []hplink.CrawlerSettings) string {
for _, settings := range settingsList {
if strings.HasPrefix(url, settings.URL) {
return settings.URL
}
}
return ""
}
API.POST(
path,
handlers.AdminGate,
server.Handler(func(req *wcg.Request) response.Response {
cursor := req.Query(cursorKey)
logger := wcg.NewLoggerWithPrefix(req, "20161009backfill")
logger.Infof("Start operation (c=%q)", cursor)
p := entities.CrawlerSettings.Query().Filter("Type=", hplink.CrawlerSettingsTypeAmeblo).MustExecute(req)
if p.Len() == 0 {
logger.Infof("No CrawlerSettings found.")
return nil
}
settingsList := p.Data.([]hplink.CrawlerSettings)
q := entities.AmebloPost.Query().Order("-UpdatedAt")
if cursor != "" {
q = q.StartCursor(cursor)
}
iter := q.MustRun(req)
var updates []hplink.AmebloPost
var needMoreIteration = true
for i := 0; i < batchSize; i++ {
_, _post := iter.MustNext()
if _post == nil {
needMoreIteration = false
break
}
post := _post.(*hplink.AmebloPost)
if post.SettingsURL == "" {
logger.Infof("Set %q for SettingsURL on %q", post.SettingsURL, post.URL)
post.SettingsURL = resolveSettingsURL(post.URL, settingsList)
}
updates = append(updates, *post)
}
entities.AmebloPost.PutMulti().DoNotUpdateTimestamp(true).MustUpdate(req, updates)
if needMoreIteration {
_path := fmt.Sprintf("%s?%s", API.Path(path), url.Values{
cursorKey: []string{iter.MustCursorString()},
}.Encode())
if err := server.RunInOpsQueue(req, _path, nil); err != nil {
logger.Errorf("Failed to continue the task: %v", err)
}
}
return response.APIOK
}),
)
return API.Path(path)
}
示例15: setupAPIDatastore
func setupAPIDatastore(app *server.App) {
var API = app.API()
if lib.IsOnLocalGAE() {
API.GET("/datastore/cleanup/:kind.json",
server.Handler(func(req *wcg.Request) response.Response {
k := entities.FindKind(req.Param("kind"), req.Query("ns"))
if k == nil {
return response.NotFound(req)
}
num := k.DeleteQuery().MustCommit(req)
return response.NewJSONResponse(map[string]int{
"entities": num,
})
}),
)
}
API.GET("/datastore/export/:kind.json",
middleware.APITokenOnly(),
server.Handler(func(req *wcg.Request) response.Response {
k := entities.FindKind(req.Param("kind"), req.Query("ns"))
if k == nil {
return response.NotFound(req)
}
// TODO: export with gzip
return middleware.EntityStreaming(
k.Query().Order(fmt.Sprintf("-%s", k.TimestampFieldName)).Limit(
wcg.ParseInt(req.Query("limit"), 100, -1, math.MaxInt32),
),
true,
).Handle(req)
}))
API.POST("/datastore/import/:kind.json",
middleware.APITokenOnly(),
server.Handler(func(req *wcg.Request) response.Response {
k := entities.FindKind(req.Param("kind"), req.Query("ns"))
if k == nil {
return response.NotFound(req)
}
var line = 0
var total = 0
var errors = make([]*entityImportError, 0)
var list = make([]interface{}, 0, 100)
var keys = make([]*datastore.Key, 0, 100)
var buff []byte
var err error
reader := bufio.NewReaderSize(req.HTTPRequest().Body, 4096)
for err != io.EOF {
buff, err = reader.ReadBytes('\n')
line += 1
if err != nil && err != io.EOF {
return response.InternalServerError(req, err)
}
buff = bytes.TrimSpace(buff)
if len(buff) == 0 { // skip empty row
continue
}
var row entityImportRow
if err2 := json.Unmarshal(buff, &row); err2 != nil {
errors = append(errors, &entityImportError{
Line: line,
Error: fmt.Sprintf("%v - (row: %q)", err2, buff),
})
continue
}
ent, err2 := k.NewEntityFromJSON([]byte(row.Entity))
if err2 != nil {
}
total = total + 1
keys = append(keys, buildKey(req, row.Key))
list = append(list, ent)
if len(list) == 100 {
k.PutMulti().DatastoreKeys(keys...).DoNotUpdateTimestamp(true).MustUpdate(req, list)
list = make([]interface{}, 0, 100)
keys = make([]*datastore.Key, 0, 100)
}
}
if len(list) > 0 {
k.PutMulti().DatastoreKeys(keys...).DoNotUpdateTimestamp(true).MustUpdate(req, list)
}
return response.NewJSONResponse(&entityImportResult{
Total: total,
Lines: line - 1,
Errors: errors,
})
}))
}