mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-28 16:03:31 -06:00
[performance] http response encoding / writing improvements (#2374)
This commit is contained in:
parent
d7e35f6bc9
commit
74700cc803
104 changed files with 526 additions and 267 deletions
|
|
@ -18,8 +18,6 @@
|
|||
package hostmeta
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/xml"
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
|
@ -52,21 +50,12 @@ func (m *Module) HostMetaGETHandler(c *gin.Context) {
|
|||
|
||||
hostMeta := m.processor.Fedi().HostMetaGet()
|
||||
|
||||
// this setup with a separate buffer we encode into is used because
|
||||
// xml.Marshal does not emit xml.Header by itself
|
||||
var buf bytes.Buffer
|
||||
|
||||
// Preallocate buffer of reasonable length.
|
||||
buf.Grow(len(xml.Header) + 64)
|
||||
|
||||
// No need to check for error on write to buffer.
|
||||
_, _ = buf.WriteString(xml.Header)
|
||||
|
||||
// Encode host-meta as XML to in-memory buffer.
|
||||
if err := xml.NewEncoder(&buf).Encode(hostMeta); err != nil {
|
||||
apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1)
|
||||
return
|
||||
}
|
||||
|
||||
c.Data(http.StatusOK, HostMetaContentType, buf.Bytes())
|
||||
// Encode XML HTTP response.
|
||||
apiutil.EncodeXMLResponse(
|
||||
c.Writer,
|
||||
c.Request,
|
||||
http.StatusOK,
|
||||
HostMetaContentType,
|
||||
hostMeta,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,5 +55,12 @@ func (m *Module) NodeInfoWellKnownGETHandler(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, resp)
|
||||
// Encode JSON HTTP response.
|
||||
apiutil.EncodeJSONResponse(
|
||||
c.Writer,
|
||||
c.Request,
|
||||
http.StatusOK,
|
||||
apiutil.AppJSON,
|
||||
resp,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
package webfinger
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
|
@ -87,13 +86,12 @@ func (m *Module) WebfingerGETRequest(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
b, err := json.Marshal(resp)
|
||||
if err != nil {
|
||||
apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1)
|
||||
return
|
||||
}
|
||||
|
||||
// Always return "application/jrd+json" regardless of negotiated
|
||||
// format. See https://www.rfc-editor.org/rfc/rfc7033#section-10.2
|
||||
c.Data(http.StatusOK, string(apiutil.AppJRDJSON), b)
|
||||
// Encode JSON HTTP response.
|
||||
apiutil.EncodeJSONResponse(
|
||||
c.Writer,
|
||||
c.Request,
|
||||
http.StatusOK,
|
||||
apiutil.AppJRDJSON,
|
||||
resp,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue