Jump to content

Help with API terminology or process


Recommended Posts

I'm trying to move away from accessing the custom databases directly since I discovered APIs.  I find the API useful for creating a new record, but I need help with the terminology for what I need to do or use for the following scenario.

I have a custom table that hosts a schedule.  I'd like to be able to request a task from that schedule.   Using API I would send off request for all records, calculate the task myself, then send an API back to the schedule to lock it so it's not given again.  There may be several parsers accessing this table, so I don't want the same two tasks sent out.

Is there a way I can move the process from my parser to the forum?   Send off one API that calculates and locks the record, returning the task?

 

Link to comment
Share on other sites

1 hour ago, Marc Stridgen said:

I would say however that our API would not interact with your own custom tables.

I believe this will work:

  1. A GET to https://my.url/api/cms/records/{database_id} pulling a single record sorted by your system.
  2. A POST to https://my.url/api/cms/records/{database_id}/{record_id} to lock that record.
  3. When completed, a second POST to unlock record and update the record for next sort/get.

Is there a way I can POST the lock at the same time I GET the record information?

 

 

Link to comment
Share on other sites

10 hours ago, Hatsu said:

Do you have your own custom table or a custom table created by the Pages application? The API is for the Pages application and not custom tables you created outside the suite.

I use the term custom table because that's what I see in the database.  But it is created by the Pages application; it has all the standard columns in addition to the ones I need.

GO OILERS!

Link to comment
Share on other sites

@MartinLawrence this sounds like something I have made recently.

I have created a custom database in Pages, where records are set to be future published. This database is visible for admin only, so no impact on content presented to your users. It is just a schedule.

Once the record is published (this is done automatically by IPS via cron), the method onPublish() is executed. You can hook into this method to add your tasks. 

The hook is executed only, when the records are published, once they are published, the hook is not triggered, so no need to lock something.

Probably it helps.

Edited by Sonya*
Link to comment
Share on other sites

21 hours ago, Sonya* said:

@MartinLawrence 

the record is published (this is done automatically by IPS via cron), the method onPublish() is executed. You can hook into this method to add your tasks. 

The hook is executed only, when the records are published, once they are published, the hook is not triggered, so no need to lock something.

This was not a feature I was aware of either - webhooks.  🙂

But no, that won't work for me.  There is a set number of records and I just edit the values in the records.   When I say "lock", I mean the record will not be offered to another parser.  I need to re-word I guess.

I think I have a solution.

  1. Parser will GET to https://my.url/api/cms/records/{database_id} pulling all records in the table, not locked(reserved) for another parser.
  2. Parser will figure out which record it wants to work on.
  3. Parser will POST to https://my.url/api/cms/records/{database_id}/{record_id} locking the record.  This will prevent it from being offered to others.  

My question is:   Will the POST return an error if I try to lock it and it is already locked?  If it just locks the record a second time, that obviously won't work for me.

Edited by MartinLawrence
Link to comment
Share on other sites

12 hours ago, Hatsu said:

Can you just not check if the record is already locked in step 2 or just get the records which aren't locked?

How can I do anything with an API other than GET or POST?   That's what I'm trying to figure out.  I can't allow the system to give out the same record twice.

Link to comment
Share on other sites

My guess is no, no error message. That's why I suggested to check beforehand, not with the API but with your own method.

I don't know your use case, though. I don't know you many records you pull and how long the process in step 2 takes and if perhaps temporarely locking those records (with a seperate field) is an option.

Link to comment
Share on other sites

I decided what I am going to do.

  1. Parser will GET to https://my.url/api/cms/records/{database_id} pulling all records in the table, not locked(reserved) for another parser.
  2. Parser will figure out which record it wants to work on.
  3. Parser will GET to https://my.url/api/cms/records//{database_id}/{record_id} to see if the record is still unlocked.
  4. Parser will POST to https://my.url/api/cms/records/{database_id}/{record_id} locking the record.  This will prevent it from being offered to others.  

There may be a chance another parser locks the record between step 3/4, but I can code to minimize that.  There would be no more than a few parsers running and the tasks can take many minutes.

 

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...