Comments (2)
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.
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)
- What is the deal with ad hoc actions HOT 5
- apiv4 regression HOT 4
- Joining on entity_tag doesn't work HOT 2
- Activity 'Date' Custom Field ignores the time HOT 1
- Documentation link - what should it be
- Contact::update() clears contact subtype HOT 2
- Error when traying to retrieve participants / gender
- REST.php not working in 5.13.0 HOT 2
- Relationship.Update gives error 500 if there are no records to update
- Bulk create/update action HOT 2
- Support custom date ranges
- Can't join contribution entity to contacts HOT 5
- Mapping api does not support a name in mapping_type_id HOT 2
- ORDER BY some_custom_field not working
- Organize next release of APIv4 HOT 12
- Can we 'removeWhere' HOT 1
- Authorization failed for anoymous WordPress User HOT 6
- "IN" operator for addWhere() not returning data HOT 3
- Keep getting errors "DB Error: no such field"
- It should be noted someplace here and on the civi extensions page that this has been rolled into core with 5.19 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from org.civicrm.api4.