Goofed Home

Conversation

$$17562
https://cosocial.ca/users/evan posted on Mar 25, 2026 11:18
In reply to: https://social.coop/users/smallcircles/statuses/116289320453692795

@smallcircles OK, great. Let's try to keep the conversations there instead of here, so everyone can participate.

https://cosocial.ca/users/evan/statuses/116289535056920220

Conversation

$$17281
https://cosocial.ca/users/evan posted on Mar 24, 2026 22:02
In reply to: https://social.coop/users/smallcircles/statuses/116286065962178688

@smallcircles I'm not sure. It's pretty important for me to track user stories as issues -- that's been the best way to get things done in task forces so far.

https://cosocial.ca/users/evan/statuses/116286407499462938

Conversation

$$17134
https://cosocial.ca/users/evan posted on Mar 24, 2026 17:28
In reply to: https://activitypub.space/post/1650

@julian @Profpatsch oh, yeah, definitely. It's really our only way to authenticate requests right now.

https://cosocial.ca/users/evan/statuses/116285330436963905

$$17139
https://mastodon.xyz/users/Profpatsch posted on Mar 24, 2026 17:33
In reply to: https://cosocial.ca/users/evan/statuses/116285330436963905

@evan @julian yeah, not saying anything against authentication via signatures, that’s a valid use-case if done correctly.

https://mastodon.xyz/users/Profpatsch/statuses/116285349584464641

Conversation

$$16664
https://cosocial.ca/users/evan posted on Mar 24, 2026 02:38
In reply to: https://hollo.social/@hongminhee/019d1d9c-6f61-7e65-8bde-a0de49cf5f16

@hongminhee oh, I'm so happy. I've seen too many implementations that assume the key id is a fragment, and just load that as the actor.

And I saw one that loaded the actor of the received activity and verified the signature against the actor's key, ignoring the keyID entirely!

I knew you would do it right! Thanks for the reassurance

https://cosocial.ca/users/evan/statuses/116281830836249359

Conversation

$$16392
https://cosocial.ca/users/evan posted on Mar 23, 2026 10:36
In reply to: https://social.coop/users/smallcircles/statuses/116277491812295481

@smallcircles @julian

Great, thanks.

https://cosocial.ca/users/evan/statuses/116278047779356306

Conversation

$$16179
https://cosocial.ca/users/evan posted on Mar 22, 2026 21:47
In reply to: https://social.coop/users/smallcircles/statuses/116274902085861242

@smallcircles @julian I think we might have different ideas about what the ActivityPub API task force is for.

To me, it's about making it possible for clients to use different servers, and different implementations of the API. That's going to include the social API defined in the ActivityPub standard, but it will also encompass things like rate limits, authentication, caching, CORS, and so on.

How that all gets documented will probably be in one or more community group reports.

https://cosocial.ca/users/evan/statuses/116275021300962889

$$16181
https://social.coop/users/smallcircles posted on Mar 22, 2026 21:54
In reply to: https://cosocial.ca/users/evan/statuses/116275021300962889

@evan @julian

The extent to which the default profile becomes a 'straightjacket' impact scope, applicability, and usability. I guess its alright as long as there's sufficient flexibility and extensibility taken into account. Guess the "sufficient" does the heavy lifting here.

https://social.coop/users/smallcircles/statuses/116275048951041356
$$16251
https://cosocial.ca/users/evan posted on Mar 22, 2026 23:51
In reply to: https://social.coop/users/smallcircles/statuses/116275048951041356

@smallcircles @julian I think that's always a tension in standards! How do you make it explicit enough that developers can build interoperable software, but extensible enough that they can try new things?

I think one pattern that works well is some base-level standards assumed, and easy ways for extensions to be discoverable and negotiable. If your preferred extension isn't available from the software on the other side of the line, you fall back to the base-level standard.

https://cosocial.ca/users/evan/statuses/116275509347250484

Conversation

$$16193
https://cosocial.ca/users/evan posted on Mar 22, 2026 22:08
In reply to: https://cosocial.ca/users/evan/statuses/116275099847960670

@julian

So, if the rate limit is 300 requests every 5 minutes, and you've already used 143 requests, you might see headers like this:

X-RateLimit-Remaining: 157
X-RateLimit-Reset: 2026-03-22T22:10:00Z

https://cosocial.ca/users/evan/statuses/116275105474482421

$$16197
https://cosocial.ca/users/evan posted on Mar 22, 2026 22:13
In reply to: https://cosocial.ca/users/evan/statuses/116275105474482421

@julian Unfortunately, there are a ton of conflicting variations on this pattern. Some APIs use a Unix timestamp for the reset datetime (!), others use HTTP header values. Mastodon uses an ISO 8601 datetime.

The X-RateLimit-* headers also don't work well if there are multiple quota policies. That can happen if there are particular types of requests that are under a stricter quota than others. There are some variants that APIs use, but they're specific to the platform.

https://cosocial.ca/users/evan/statuses/116275124154956660
$$16203
https://cosocial.ca/users/evan posted on Mar 22, 2026 22:20
In reply to: https://cosocial.ca/users/evan/statuses/116275124154956660

@julian The big advance is the new rate limit headers RFC draft:

https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-ratelimit-headers

It supports having multiple policies. It's very clean and elegant. Unfortunately, it's still in draft stage. It's probably good to be ready for future changes if you're going to implement this.

https://cosocial.ca/users/evan/statuses/116275152929600900

Conversation

$$16146
https://social.coop/users/smallcircles posted on Mar 22, 2026 20:08
In reply to: https://activitypub.space/post/1641

@evan

> Rate limits are a common part of APIs.

Yes, of API *implementations*, and they may become part of the public interface of these implementation. Whether they should be part of an open standard protocol specification is a different matter imho. Perhaps in a separate implementation guide, suggesting recommended practices.

Or perhaps there may be some way to formulate a generic mechanism in the protocol specification that makes rate limits an extension point, without pinning to a particular method, esp. if it is only a de facto standard.

(Other example. The fediverse is still pinned to an expired draft of HTTP signatures.)

OTOH if the goal of the task force is to mostly just provide implementation guidance, and maybe a reference impl, then I guess examples of rate limiting may be provided.

@julian

https://social.coop/users/smallcircles/statuses/116274632996483178

$$16154
https://cosocial.ca/users/evan posted on Mar 22, 2026 20:41
In reply to: https://social.coop/users/smallcircles/statuses/116274718079331293

@smallcircles @julian the point of the API task force is to make using the API across servers possible. That's why we're doing the OAuth work. I think rate limiting is part of the basic profile; it's one of the things you need to support to use the API across different servers.

https://cosocial.ca/users/evan/statuses/116274763446935703
$$16185
https://cosocial.ca/users/evan posted on Mar 22, 2026 22:02
In reply to: https://activitypub.space/post/1641

@julian There are 3 main clusters.

They're linked here for the ActivityPub API task force, but they also apply for the federation protocol:

https://github.com/swicg/activitypub-api/issues/4#issuecomment-4083573914

https://cosocial.ca/users/evan/statuses/116275080781185862

Conversation

$$15820
https://cosocial.ca/users/evan posted on Mar 22, 2026 02:33
In reply to: https://cosocial.ca/users/evan/statuses/116270478636184245

Anyway, here's my thought: make collection pages real, stable objects, with fixed contents and real modification dates. Return only references, not embedded objects. Do filtering, though. And make pages big -- 100 items or more.

https://cosocial.ca/users/evan/statuses/116270486615933121

$$16057
https://social.coop/users/django posted on Mar 22, 2026 16:34
In reply to: https://cosocial.ca/users/evan/statuses/116270486615933121

@evan mastodon’s approaches is interesting in this regard, it returns embedded objects for local items, and references for remote objects. Best of both

https://social.coop/users/django/statuses/116273791676884875
$$16058
https://cosocial.ca/users/evan posted on Mar 22, 2026 16:42
In reply to: https://social.coop/users/django/statuses/116273791676884875

@django it's good in some ways, but they still don't return Last-Modified headers.

https://cosocial.ca/users/evan/statuses/116273825124609051

Conversation

$$16050
https://cosocial.ca/users/evan posted on Mar 22, 2026 16:04
In reply to: https://social.coop/users/smallcircles/statuses/116272009707549380

@smallcircles @julian I disagree!

Rate limits are a common part of APIs. For apps to work across servers, the servers need to provide about the same interface.

Using standard rate-limiting headers lets client apps detect what rate limits they will be held to. It reduces the uncertainty.

Fortunately, there is a well known de facto standard and an even better IETF standard coming up. We should point them out.

https://cosocial.ca/users/evan/statuses/116273672770097199

Create New Post