Code Monkey home page Code Monkey logo

Comments (2)

mickadoo avatar mickadoo commented on August 30, 2024

I'm first trying to figure out what's going on in api3. I seems request validation is done in the APIv3SchemaAdapter which uses getfields requests to check what to validate. The generic getfields request calls the spec helper function to modify the fields.

To keep the same functionality there will be a lot of code to port over and clean up:

  • civicrm_api3_generic_getfields (which seems to be used all over the place and in validation)
  • The helper functions to change the spec, called from inside this civicrm_api3_generic_getfields
  • _civicrm_api3_generic_get_metadata_options
  • _civicrm_api3_swap_out_aliases
  • civicrm_api3_verify_mandatory
  • _civicrm_api3_validate_fields

And after that we can decide how to allow changing the API spec. It shouldn't be hard to open up spec changes using an event, for example subscribing to the existing civi.api.prepare event, just checking if the request is for get_fields and dispatching a new 'civi.api.getspec' event.

We might consider making bigger changes though, like making the specification an object instead of an array.

from org.civicrm.api4.

mickadoo avatar mickadoo commented on August 30, 2024

I've focused on making the spec gathering use a more object orientated approach. I have a single service that is responsible for gathering all the request specifications. It fetches fields from the DAO, adds custom fields and adds the options available for all fields. It returns this as a RequestSpec object, contianing an array of FieldSpec objects, each with properties like name, title, description, type, default value etc.

It allows extensions to tag services as a "spec_provider" which will at it to the list of providers. These services will receive the RequestSpec object and are free to modify it in any way.

Other than validation I guess this will be used for the API explorer. I would prefer to split validation based on this to another issue. I'm still not 100% convinced we should be doing validation at API level that's not repeated in the BAO. Other than validation and the API explorer it would be good for me to know why this spec gathering is so important. Maybe you could update the description @colemanw just so I can tell if what I've done will match the requirements.

I've added a JSON encoded sample of a RequestSpec object to show what's available.

This is a fairly big PR, adding a lot of classes and tests. I'll wait until the open PRs are merged, but it would be good to get any feedback on the changes.

from org.civicrm.api4.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.