Skip to content

Standardize action verbs #175

Closed
Closed
@jasonrhodes

Description

@jasonrhodes

Since this round of 2.0 PRs is probably our last chance for breaking changes in a while, it would be nice if we could standardize all of the action verbs we're using across resources. Right now, after the PRs:

// templates, relay webhooks, recipient lists, and sending domains

{resource}.all()              // get collection
{resource}.find()             // get one by id
{resource}.create()           // create one
{resource}.update()           // update one by id
{resource}.delete()           // delete one by id


// webhooks

webhooks.all()                // get collection
webhooks.describe()           // get one by id
webhooks.create()             // create one
webhooks.update()             // update one by id
webhooks.delete()             // delete one by id


// suppression

suppressionList.search()      // get collection (can filter by criteria)
suppressionList.getEntry()    // get one by id
suppressionList.upsert()      // create, or update one by id
suppressionList.deleteEntry() // delete one by id

I think all and maybe find come from ActiveRecord, but even AR has find_by and you can find by any column criteria you want, assuming a relational db backend. I don't think describe fits at all, and looking at everything as a whole now, I don't think suppression needs to be different.

The main difference in suppression's search is that it can filter by criteria, but at some point we will most likely be adding pagination to all of our API endpoints, which means you'll be specifying criteria in all no matter what, so the word "all" makes a little less sense.

Here's what I propose across the board. Happy to hear reasons why this won't work, needs improvement, etc.

{resource}.list()           // get collection (can filter by criteria where applicable)

{resource}.get(id)          // get one by id

{resource}.create()         // create one
{resource}.update(id)       // update one by id
{resource}.upsert([id])     // replaces both create and update, where applicable

{resource}.delete(id)       // delete one by id

{resource}.{custom}()       // resource-specific action, e.g. getBatchStatus

UPDATE: Per comment discussion, removed bc aliases, added required params. Optional params like options and callback not specified here.

Side note: If we go this way I am of course happy to help with the conversion, examples, docs, tests, etc.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions