Using Clean URLs in RESTful API

前端 未结 3 946
失恋的感觉
失恋的感觉 2020-12-02 11:13

\"Clean URLs\" also known as \"RESTful URLs\" are user-friendly, purely structural, and do not contain a query string. Instead they contain only the path of the resource.

相关标签:
3条回答
  • 2020-12-02 11:49

    Try this:

    RewriteRule ^([^/]+)\/([^/]+)\/?$ getdata.php?para1=$1&para2=$2 [NC]
    
    0 讨论(0)
  • 2020-12-02 11:55

    This worked for me: Put this in the htaccess file at the root of your website.

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L]
    RewriteRule (recipe/.*) api/app.php?request=$1 [QSA,NC,L]
    </IfModule>
    

    And then if you go to the page http://localhost/api/person/susan You will see that it takes you to the file at http://localhost/api/api.php I also have a recipe page that I go to using http://localhost/recipe/edit/2 Put this in the api.php file:

    <?php
    $requestParts = explode('/',$_GET['request']);
    $category = $requestParts[0];
    $action = $requestParts[1];
    $data = $requestParts[2];
    if($category == 'recipe'){
        include($_SERVER['DOCUMENT_ROOT'].'/pages/add_recipe.php');
    }
    

    The variables above will hold the category: recipe, action: add or edit, and the data which can be a number which is the id for the recipe or what ever you want it to be. Then inside the add_recipe.php use the variables to determine whether you are editing or adding a recipe. And if you use the api you can include different files depending on what ajax request you are using to talk to your api.

    0 讨论(0)
  • 2020-12-02 12:00

    1) Not if you use a RESTful framework like RecessPHP or if you use a mod_rewrite rule in your .htaccess file to redirect all API requests to a single PHP file (known as the front controller).

    .htaccess

    RewriteEngine On
    RewriteRule ^/api/ api.php
    

    api.php

    $request = $_SERVER['REQUEST_URI'];  //this would be /users/show/abc.json
    

    2) You can use the rewrite module of apache to redirect all api requests to a special PHP file that handles them. Depending on your apache configuration, the original requested (RESTful) url will be stored in a server variable in PHP, I believe it's $_SERVER['REQUEST_URI']. Of course you could also just pass along a $_GET[] variable to PHP that contained the RESTful url.

    .htaccess

    RewriteEngine On
    RewriteRule ^/api/([^\.]+).(xml|json|atom) api.php?url=$1&type=$2
    

    api.php

    $request_parts = explode('/', $_GET['url']); // array('users', 'show', 'abc')
    $file_type     = $_GET['type'];
    
    $output = get_data_from_db(); //Do your processing here
                                  //You can outsource to other files via an include/require
    
    //Output based on request
    switch($file_type) {
        case 'json':
            echo json_encode($output);
            break;
        case 'xml':
            echo xml_encode($output); //This isn't a real function, but you can make one
            break;
        default:
            echo $output;
    }
    

    3) Twitter (and many other APIs) use this because it is a convenient way of supplying the format that an application expects back from an API. All of the API requests are rerouted to a single PHP file which handles creating all the files and echoing their contents to the output. The file is never actually stored on the server (unless it is cached).


    Good Resources

    • mod_rewrite, a beginner's guide
    • Create a REST API with PHP
    • Recess PHP Framework | Tutorials

    A note on RecessPHP. It's certainly a great tool and I would encourage you look at it (maybe at its source to get an idea of how it processes things), but that said, it seems a bit clunky to me. The fact that path names are written in special comments seems very not-PHP to me. I'd stray away from this, and I wouldn't call it the perfect framework, but it's certainly a start. Good luck!

    0 讨论(0)
提交回复
热议问题