On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Jason Sonderman Reply #1, 2 years ago
    I have been following this to set up a simple API to get datafeed from my resource tree:
    https://docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/developing-rest-servers

    I am hosting this on modx cloud and I keep getting the
    {"success":false,"message":"Method not allowed","object":[],"code":405}
    error.

    My files are in the /rest/ directory at my site root.

    rest/index.php:
    <?php
    // Boot up MODX
    require_once dirname(dirname(__FILE__)) . '/config.core.php';
    require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
    $modx = new modX();
    $modx->initialize('web');
    $modx->getService('error','error.modError', '', '');
    
    // Load the modRestService class and pass it some basic configuration
    $rest = $modx->getService('rest', 'rest.modRestService', '', array(
        'basePath' => dirname(__FILE__) . '/Controllers/',
        'controllerClassSeparator' => '',
        'controllerClassPrefix' => 'MyController',
        'xmlRootNode' => 'response',
    ));
    // Prepare the request
    $rest->prepare();
    // Make sure the user has the proper permissions, send the user a 401 error if not
    if (!$rest->checkPermissions()) {
        $rest->sendUnauthorized(true);
    }
    // Run the request
    $rest->process();


    rest/controllers/programs
    class MyControllerPrograms extends modRestController {
        public $classKey = 'modResource';
        public $defaultSortField = 'id';
        public $defaultSortDirection = 'DESC';
     
        public function beforePost()
        {
            return false;
        }
     
        public function beforePut()
        {
            return false;
        }
     
        public function beforeDelete()
        {
            return false;
        }
     
    }
    }
    
    


    nginx rules
    location /rest/ {
        try_files $uri @modx_rest;
    }
    location @modx_rest {
        rewrite ^/rest/(.*)$ /rest/index.php?_rest=$1&$args last;
    }
    location / {
        try_files $uri $uri/ @modx-rewrite;
    }


    Most ideas on the net are around putting an htaccess in the rest directory, but with nginx this isn't relevant.

    What could be missing in the above set up? I will be calling this api from a gatsby.js (node.js based) site as a data source.

    Thanks